Unittest验证异步方法Java

问题描述 投票:0回答:1

我想验证当运行方法A时,我的代码通过方法B运行(1次),如下所示

public class ClassA {

    @Inject
    @Named("executor")
    ExecutionContextExecutor eventHandlerExecutor;

    public Object methodA (Object x, Object y) {
        ...
        CompletableFuture.runAsync(() -> methodB(i, j), eventHandlerExecutor);
        ...
    }

    public void methodB (Object n, Object m) {
        ...
    }
}

我应该如何为此编写单元测试?

classA.methodA(x, y);

// should I spy classA?
verify(classA, times(1)).methodB(any(), any());
java unit-testing concurrency completable-future
1个回答
0
投票

是的。您可以监视要测试的

ClassA
实例。间谍的好处是它允许您测试真实的东西,但同时可以让您验证其上的某些方法是否真正执行。

喜欢的东西:

@Test
void test(){
    ClassA sut = new ClassA(xxx);
    sut = spy(sut);
    
    sut.methodA(aaa,bbb);
    verify(sut, times(1)).methodB(eq(aaa), eq(bbb));
}

© www.soinside.com 2019 - 2024. All rights reserved.