java 中使用Mockito 时@MockitoSettings的作用是什么

@MockitoSettings 注解是 Mockito 框架的一部分,用于自定义 Mockito 的配置。它允许你通过注解的方式,调整默认的 Mockito 行为和设置,而无需在每个测试中编写配置代码。此注解可以与 JUnit 5 一起使用,结合 @ExtendWith(MockitoExtension.class) 来增强测试的灵活性。

@MockitoSettings 的主要作用

  • 自定义严格度(Strictness): Mockito 提供不同的严格度模式,用于控制模拟对象在测试过程中的行为检查。通过 @MockitoSettings,你可以定义测试中需要的严格度级别,以控制未使用的 Mock、未定义的行为等。

  • 全局配置: @MockitoSettings 提供了一种便捷的方法,可以为整个测试类或方法设置全局的 Mockito 配置,避免重复代码。

常见属性

@MockitoSettings 目前最常用的属性是 strictness,它控制 Mock 对象的严格程度:

  1. Strictness.LENIENT:

    • 宽松模式,Mockito 不会对未使用的 Mock 方法或未定义行为进行严格检查。这对于较宽松的测试用例非常有用,允许测试中有未调用的 Mock 行为而不抛出异常。

    示例:

    @ExtendWith(MockitoExtension.class)
    @MockitoSettings(strictness = Strictness.LENIENT)
    public class MyTest {
    
        @Mock
        private MyService myService;
    
        @Test
        void testExample() {
            // Mockito 不会严格检查未使用的 Mock 行为
        }
    }
    
  2. Strictness.STRICT_STUBS (默认值):

    • 严格模式,Mockito 会确保每个创建的 Stub(打桩,即定义行为的 Mock 方法)都被测试代码使用。如果有未使用的 Stub,测试将失败。这可以帮助确保每个 Mock 行为都是必要的,避免不必要的 Mock。

    示例:

    @ExtendWith(MockitoExtension.class)
    @MockitoSettings(strictness = Strictness.STRICT_STUBS)
    public class MyTest {
    
        @Mock
        private MyService myService;
    
        @Test
        void testExample() {
            // Mockito 会严格检查 Mock 行为
            when(myService.doSomething()).thenReturn("mocked value");
        }
    }
    

使用场景

  1. 自定义 Mock 行为检查: 当你在测试中不希望 Mockito 对未使用的 Mock 方法进行严格检查时,可以使用 LENIENT 模式,减少不必要的测试失败。

  2. 全局设置严格模式: 对于大型测试类或项目,可以通过 @MockitoSettings 设置全局的 Mock 严格模式,确保所有测试遵循一致的 Mock 行为检查规则。

总结

  • @MockitoSettings 用于调整 Mockito 的全局行为,尤其是设置 Mock 的严格度。
  • 属性 strictness 控制 Mock 的检查方式,LENIENT 提供更宽松的控制,而 STRICT_STUBS 提供更严格的行为验证。

通过使用 @MockitoSettings,你可以灵活地控制测试中的 Mock 行为验证,提高测试的稳定性和可维护性。

posted @ 2024-09-21 17:01  gongchengship  阅读(78)  评论(0编辑  收藏  举报