当测试类没有单独执行时,java@SpyBean不会拦截方法调用
我有多个@WebMvcTest
注释的测试类,如果单独执行(例如通过mvn -Dtest=BTest test
或通过IDE),它们会成功运行
但是,如果它们一起执行(例如通过mvn test
或mvn package
),一个测试会失败(BTest
在下面的代码中),因为@SpyBean
注释的字段不会拦截方法调用。其他测试没有任何@SpyBean
相应的代码结构如下:
// ATest.java
@WebMvcTest
class ATest {
...
}
// BTest.java
@WebMvcTest
class BTest {
...
@SpyBean
private ComponentToSpyOn comp;
...
@Test
void testSomething() {
...
latch = new CountDownLatch(1);
Mockito.doAnswer(inv -> {
var result = inv.callRealMethod();
latch.countDown();
return result;
}).when(comp).execute(any());
// Execute something that would lead to call interception
// Wait for method return
if (!latch.await(3000, TimeUnit.MILLISECONDS)) {
latch = null;
throw new TimeoutException();
}
...
}
}
// CTest.java
@WebMvcTest
class CTest {
...
}
我试图根据这里的建议@SpyBean with few Integration tests doesn't work correctly对受影响的测试类及其方法应用@DirtiesContext
,但没有结果
由于@SpyBean
不是null,并且不拦截方法调用,因此必须以某种方式错误地初始化它
我已经解决了这里描述的Maven配置问题https://stackoverflow.com/a/68619944/971355 每个测试都在一个单独的虚拟机上进行,但我不喜欢这个解决方案,因为它肯定会降低测试的执行速度
共 (0) 个答案