java 中使用Mockito 时@MockitoSettings的作用是什么
@MockitoSettings
注解是 Mockito 框架的一部分,用于自定义 Mockito 的配置。它允许你通过注解的方式,调整默认的 Mockito 行为和设置,而无需在每个测试中编写配置代码。此注解可以与 JUnit 5 一起使用,结合 @ExtendWith(MockitoExtension.class)
来增强测试的灵活性。
@MockitoSettings
的主要作用
-
自定义严格度(Strictness): Mockito 提供不同的严格度模式,用于控制模拟对象在测试过程中的行为检查。通过
@MockitoSettings
,你可以定义测试中需要的严格度级别,以控制未使用的 Mock、未定义的行为等。 -
全局配置:
@MockitoSettings
提供了一种便捷的方法,可以为整个测试类或方法设置全局的 Mockito 配置,避免重复代码。
常见属性
@MockitoSettings
目前最常用的属性是 strictness
,它控制 Mock 对象的严格程度:
-
Strictness.LENIENT:
- 宽松模式,Mockito 不会对未使用的 Mock 方法或未定义行为进行严格检查。这对于较宽松的测试用例非常有用,允许测试中有未调用的 Mock 行为而不抛出异常。
示例:
@ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) public class MyTest { @Mock private MyService myService; @Test void testExample() { // Mockito 不会严格检查未使用的 Mock 行为 } }
-
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"); } }
使用场景
-
自定义 Mock 行为检查: 当你在测试中不希望 Mockito 对未使用的 Mock 方法进行严格检查时,可以使用
LENIENT
模式,减少不必要的测试失败。 -
全局设置严格模式: 对于大型测试类或项目,可以通过
@MockitoSettings
设置全局的 Mock 严格模式,确保所有测试遵循一致的 Mock 行为检查规则。
总结
@MockitoSettings
用于调整 Mockito 的全局行为,尤其是设置 Mock 的严格度。- 属性
strictness
控制 Mock 的检查方式,LENIENT
提供更宽松的控制,而STRICT_STUBS
提供更严格的行为验证。
通过使用 @MockitoSettings
,你可以灵活地控制测试中的 Mock 行为验证,提高测试的稳定性和可维护性。