有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当测试类没有单独执行时,java@SpyBean不会拦截方法调用

我有多个@WebMvcTest注释的测试类,如果单独执行(例如通过mvn -Dtest=BTest test或通过IDE),它们会成功运行

但是,如果它们一起执行(例如通过mvn testmvn 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) 个答案