Mockito框架常用注解

这篇具有很好参考价值的文章主要介绍了Mockito框架常用注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

他若喜欢你,你脾气再大都叫个性,他若不喜欢你,就算你温顺的像只猫,他都嫌你掉毛

常用注解

Mockito框架常用注解包括:

  1. @Mock:用于创建被mock的对象实例。
  2. @Spy:用于创建被spy的对象实例,即保留原对象的行为。
  3. @InjectMocks:用于创建需要注入被mock对象的类的实例。
  4. @Captor:用于捕获方法调用的参数,方便进行进一步的断言和校验。
  5. @MockBean:用于创建Spring Bean的Mock对象,主要用于集成测试。
  6. @MockitoSettings:用于设置Mockito框架的全局设置。

这些注解能够帮助开发者简化Mockito框架的使用,提高测试效率

扩展一下

以下是这些Mockito框架常用注解的使用方法:

@Mock:用于创建被mock的对象实例。在单元测试中,可以使用@Mock注解创建需要进行模拟的对象实例,以方便进行测试。例如:

@Mock
private UserDao userDao;

@Spy:用于创建被spy的对象实例,即保留原对象的行为。与@Mock注解不同的是,@Spy注解会保留原对象的行为,除了被特别标记的方法,其他方法都会执行原有的代码。例如:

@Spy
private UserUtils userUtils;

@InjectMocks:用于创建需要注入被mock对象的类的实例。在进行单元测试时,有时需要测试一个类的方法,但是该类中需要调用另一个被mock的对象的方法。这时可以使用@InjectMocks注解,将需要被mock的对象注入到该类中。例如:

@InjectMocks
private UserServiceImpl userService;

@Captor:用于捕获方法调用的参数,方便进行进一步的断言和校验。在进行单元测试时,有时需要校验某个方法的参数是否符合预期。这时可以使用@Captor注解来捕获方法调用的参数,并进行进一步的断言和校验。例如:

@Captor
private ArgumentCaptor<User> userCaptor;

@MockBean:用于创建Spring Bean的Mock对象,主要用于集成测试。在进行集成测试时,有时需要使用Spring容器中的Bean进行测试,但是又不希望与其他服务产生依赖关系。这时可以使用@MockBean注解,创建一个Spring Bean的Mock对象。例如:

@MockBean
private UserService userService;

@MockitoSettings:用于设置Mockito框架的全局设置。在进行单元测试时,有时需要设置Mockito框架的一些全局设置,例如默认的返回值等。这时可以使用@MockitoSettings注解来设置这些全局配置。例如:

@MockitoSettings(strictness = Strictness.LENIENT)
public class UserServiceTest {
    // ...
}

@Captor

@Captor是Mockito框架提供的一个注解,用于捕获方法调用的参数并将其保存在参数所定义的变量中。通常用于在单元测试中进行进一步的断言和校验。

使用@Captor注解需要先声明一个Captor对象,例如:

@Captor
private ArgumentCaptor<User> userCaptor;

在执行方法时,将该Captor对象传入Mockito的verify方法中,Mockito将捕获到该方法的参数,并将其保存在userCaptor中。例如:

verify(userService).createUser(userCaptor.capture());
User capturedUser = userCaptor.getValue();

这里的verify方法表示验证方法是否被调用,userCaptor.capture()表示捕获方法的参数,userCaptor.getValue()则表示获取捕获的参数。

通过@Captor注解捕获参数后,可以对捕获到的参数进行进一步的断言和校验,以确保方法调用的正确性。

@MockBean

@MockBean 是 Spring Boot 提供的一个注解,用于在集成测试中创建一个 Spring Bean 的 Mock 对象。

它的作用与 Mockito 中的 @Mock 注解类似,都是用于创建一个被 mock 的对象实例。但是 @MockBean 更加适用于集成测试,因为它可以方便地将 mock 对象注入到 Spring 容器中,以供被测试对象使用。

在使用 @MockBean 注解时,需要注意以下几点:

  1. @MockBean 只能用于创建 Spring Bean 的 Mock 对象,不能用于创建普通的 Java 对象的 Mock。

  2. 使用 @MockBean 创建的 Mock 对象只存在于 Spring 的应用上下文中,与 Mockito 创建的 Mock 对象并不一样。这意味着,如果需要在不同的测试方法中使用同一个 Mock 对象,需要将它定义为一个类级别的字段,而不能在方法中创建。

  3. 在使用 @MockBean 创建 Mock 对象时,Spring Boot 会自动将这些对象注入到应用上下文中,而且如果被注入的对象已经在上下文中存在,那么原来的对象将会被替换成 Mock 对象。这一点需要特别注意,如果不想替换原来的对象,需要使用 @SpyBean 注解。

下面是一个使用 @MockBean 创建 Mock 对象的例子:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @MockBean
    private UserDao userDao;

    @Test
    public void testFindUserById() {
        User user = new User(1L, "Alice");
        Mockito.when(userDao.getUserById(1L)).thenReturn(user);
        User result = userService.findUserById(1L);
        Assert.assertEquals(user.getName(), result.getName());
    }
}

在这个例子中,UserDao 是一个数据访问对象,在 UserService 中被使用。为了测试 UserService,需要 mock UserDao 对象,以便测试 UserService 的方法。

使用 @MockBean 注解可以方便地创建 UserDao 的 Mock 对象,并将它注入到 Spring 容器中,以供 UserService 使用。在测试方法中,使用 Mockito 的 when 方法设置 UserDao 的返回值,以便测试 UserService 的方法

@MockitoSettings

@MockitoSettings 是一个注解,用于设置 Mockito 框架的全局配置,可以在整个测试类中使用。它有多个属性,可以配置各种全局设置。

以下是一些常见的属性:

  • verboseLogging:默认为 false,可以设置为 true 来打印更详细的日志信息。
  • strictness:默认为 Strictness.LENIENT,可以设置为 Strictness.STRICT_STUBSStrictness.WARN 来使 Mockito 在执行时更加严格。
  • mocksOnSpies:默认为 false,可以设置为 true 来在 spy 对象上使用 Mockito 的 stubbing 和 verification。
  • reporting:默认为 Reporting.ASSERT,可以设置为 Reporting.LOGBACKReporting.STDOUT 来更改报告的方式。

使用示例:

@MockitoSettings(strictness = Strictness.STRICT_STUBS)
public class MyTest {
    // ...
}

此示例将全局 Mockito 设置更改为 Strictness.STRICT_STUBS,在测试类中将更严格地对 stub 进行校验。

总的来说,@MockitoSettings 可以帮助测试人员全局配置 Mockito 框架,使测试更加严谨和可靠。文章来源地址https://www.toymoban.com/news/detail-646510.html

到了这里,关于Mockito框架常用注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java单元测试之Mockito

    Mockito是一种Java Mock框架,主要就是用来做Mock测试的,它可以模拟任何Spring管理的Bean、模拟方法的返回值、模拟抛出异常等等,同时也会记录调用这些模拟方法的参数、调用顺序,从而可以校验出这个Mock对象是否有被正确的顺序调用,以及按照期望的参数被调用。 Mockito的特

    2024年02月13日
    浏览(49)
  • SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

    因为继承了 spring-boot-starter-parent ,所以我们依赖的 spring-boot-starter-test 不需要写具体的版本,可以直接集成父级的版本定义。其中, spring-boot-starter-web 是用于提供 REST API 的 web 容器, spring-boot-starter-test 可以提供各种测试框架的, spring-boot-maven-plugin 是将 SpringBoot 应用打包为

    2024年04月15日
    浏览(52)
  • Java单元测试浅析(JUnit+Mockito)

    Java测试我们应该都遇到过,一般我们会被要求做单元测试,来验证我们代码的功能以及效率。 这里来和大家一起探讨下有关单于测试。 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单

    2024年02月06日
    浏览(60)
  • 针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案

    1、 调用其他service层方法 2、 调用本service层方法 3、其他问题

    2024年01月24日
    浏览(42)
  • 搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试

    SpringBoot支持集成Mockito做单元测试,有时候SpringBoot有很多外部依赖,在本地很难启动或者启动时间很长,而我们只想对某个方法进行测试,需要怎样做呢? 一、本文要点 接前文,我们已经已介绍在两种mock模式下,怎样根据入参返回自定义mock结果,但都是通过启动SpringBoot项

    2024年02月06日
    浏览(44)
  • springboot项目使用Junit5 + mockito + jacoco 实现单元测试以及代码覆盖率检查

    在创建springboot项目时会默认添加spring-boot-starter-test依赖,其中已经包含了junit、mockito依赖,根据springboot版本的不同junit和mockito的版本也会有所不同 先说一下各自功能: junit只说一点,junt4和junit5的注解不同,使用方式略有差异,其他不赘述了,基本用法都懂。 mockito是mock的

    2023年04月23日
    浏览(55)
  • java后端用mockito做单元测试,一直报错空指针问题【已解决】

    写java后端,用mockito做单元测试 跑测试代码的时候,一直报空指针错: 测试代码如下: debug发现 ruleService 和 mockRuleMapper 为空: 一开始以为是测试代码哪写错了,作为一个后端小白,在网上搜索相关bug解决办法,乃至询问身边写过测试的人,前前后后弄了好几个小时,还是一

    2024年02月12日
    浏览(51)
  • 单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析

      如果您觉得有用的话,记得给 博主点个赞,评论,收藏一键三连啊 ,写作不易啊^ _ ^。   而且听说 点赞的人每天的运气都不会太差 ,实在白嫖的话,那欢迎常来啊!!! 01 准备 01::01 安装maven dependency helper插件和maven helper插件 用来分析你的依赖 打开idea 选择 File - Settin

    2023年04月08日
    浏览(36)
  • Mockito单元测试基本使用

    本文参考: 【码农教程】手把手教你Mockito的使用 - 掘金 (juejin.cn) java - doReturn().when()与when().thenReturn() - 成长之路 - SegmentFault 思否 单元测试实践篇:Mock_阿里巴巴淘系技术团队官网博客的博客-CSDN博客 阿里是如何进行单元测试培训的?_Hollis Chuang的博客-CSDN博客 【Mockito】Mock

    2024年02月10日
    浏览(48)
  • Mockito单元测试异常情况

    一、空指针异常 例子: 使用Collectors.groupingBy()进行分组时, 分组值存在null值 。 解决办法:分组值为null时,默认值为空字符,或者让数据不为空。 二、多个参数匹配异常 例如: 如果a和b一个是正常传参(list、map、string…)另一个是任意万能传参(any()、anyList()、anyString(

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包