我是 JUnit5 的新手,我注意到发生了一些奇怪的事情。
让我们看一个例子,
我有一个名为 A 的源类
class A {
someDownStreamService service;
void printer() {
int getData = service.getIntegerData();
print(getData);
}
}
现在当我写测试用例时,
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class JUnit5TestCaseForClassA {
@Mock
private someDownStreamService service;
@InjectMocks
private A a;
@BeforeEach
setUp() {
initMocks(this);
Mockito.when(service.getIntegerData()).thenReturn(25);
}
@Test
void test1() {
a.printer();
}
@Test
void test2() {
Mockito.when(service.getIntegerData()).thenReturn(19);
a.printer();
}
}
当我单独触发 test2() 时,printer() 函数正在打印 19,因为我认为 Mockito.when() 语句被覆盖以在 test2() 函数中返回 19,而不是在 @BeforeEach 中注册的返回 25。
当我执行类'JUnit5TestCaseForClassA'下的所有测试类时,我看到printer()函数正在为这两个测试函数打印25。压倒一切没有发生吗?或者是什么问题?
为什么会出现这种差异??????
我可以看到制作 @TestInstance(TestInstance.Lifecycle.METHOD) 将解决问题,因为每个测试用例都是用新的测试实例触发的。但我想用 Lifecycle.PER_CLASS 进行测试。