我一直在模拟函数 ResultSetFuture 的测试,我使用了来自 Github 的示例(有效)用于测试 ResultSetFuture,但我正在测试/模拟的代码使用 Futures#successfulAsList
如图所示 here .所以在第 34 行中,测试只是停止并且永远不会结束。下面显示的代码是暂停的测试的一部分。
ResultSetFuture future = Mockito.mock(ResultSetFuture.class);
Mockito.doReturn(result).when(future).get();
Mockito.doReturn(future).when(session).executeAsync(Mockito.anyString());
ResultSetFuture resultF = session.executeAsync("select value from table where key='a'");
Future<List<ResultSet>> data = Futures.successfulAsList(new ArrayList(){{ add(resultF); }});
List finished = data.get(); // <---- The test stops here
最佳答案
您需要在future
中模拟isDone
方法以指示执行完成并避免代码暂停。
ResultSetFuture future = Mockito.mock(ResultSetFuture.class);
Mockito.doReturn(result).when(future).get();
Mockito.doReturn(future).when(session).executeAsync(Mockito.anyString());
Mockito.doReturn(true).when(future).isDone(); //<-- mock to avoid halting
ResultSetFuture resultF = session.executeAsync("select value from table where key='a'");
Future<List<ResultSet>> data = Futures.successfulAsList(Collections.singletonList(resultF));
List finished = data.get(); // <---- The test stops here
关于java - future 结果集的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589372/