使用mockito测试具有CompletableFuture.allOf的方法

Har*_*ini 3 java mockito powermockito

我有一个名为 doParallelThings 的方法:

public Dummy doParallelThings(Map<String, String> mapp) throws Exception {
        Dummy dummy = new Dummy();

        CompletableFuture<Ans1> one = firstService.getOne(mapp.get("some1"), mapp);
        CompletableFuture<Ans2> two = secondService.getTwo(headersMap.get("some2"), mapp);

        CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(one, two);
        try {
            combinedFuture.get();
            dummy.setOne(one.get());
            dummy.setTwp(two.get());

        } catch (Throwable e) {

        }
        return dummy;
    }
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但当我尝试测试它时, combinedFuture.get();进入无限循环。

单元测试如下:

@Mock
    private CompletableFuture<Void> ans;

@Test
    public void testDoParallelThings() throws Exception {

        PowerMockito.mockStatic(CompletableFuture.class);
        PowerMockito.when(CompletableFuture.allOf(any())).thenReturn(ans);
        when(ans.get()).thenReturn(null);

        Dummy dummy = dummyService. doParallelThings(mockMap);
        assertNotNull(dummy);
    }
Run Code Online (Sandbox Code Playgroud)

我还在@RunWith(PowerMockRunner.class) @PrepareForTest({CompletableFuture.class})测试类上面添加了。

我缺少什么?

Har*_*ini 5

when(firstService.getOne(any(), any())).thenReturn(CompletableFuture.completedFuture(mockOne));

解决了我的问题