gpt4 book ai didi

java - 如何使用 Mockito 测试不模拟对象的异步方法?

转载 作者:行者123 更新时间:2023-11-30 08:18:48 26 4
gpt4 key购买 nike

我想用 Mockito 测试下面的代码

@Override
public void getSessionList(final int carId, final ResultCallback<List<Session>> callback) {
jobExecutor.execute(new Runnable() {
@Override
public void run() {
List<SessionEntity> sessions = IDataStore.getSessionList(carId);
final List<Session> sessionList = new ArrayList<>();
if (sessions != null) {
for (SessionEntity entity : sessions) {
sessionList.add(mapper.transform(entity));
}
uiThread.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onResult(sessionList);
}
}
});
}
}
});
}

我尝试做这样的事情,但是我的验证方法将比可运行的早执行。Thread.sleep() 对于前两个验证效果很好,但是如何测试将在主线程中执行的 callback.onResult 的结果?

private Repository repository // not mocked
@Mock
private IDataStore dataStore;
@Mock
private DataToDomainMapper dataToDomainMapper;
@Mock
private ResultCallback resultCallback;

@Test
public void testGetSessionListCallbackSuccess(){
List<SessionEntity> sessionEntities = Arrays.asList(sessionEntity, sessionEntity, sessionEntity);

given(dataStore.getSessionList(anyInt())).willReturn(sessionEntities);
given(dataToDomainMapper.transform(any(SessionEntity.class))).willReturn(session);

repository.getSessionList(1, resultCallback);

verify(dataStore).getSessionList(anyInt());
verify(dataToDomainMapper, times(3)).transform(any(SessionEntity.class));
verify(resultCallback).onResult(any(List.class));
}

最佳答案

查看用于测试异步方法的工具 Awaitility 。非常方便的工具,为我节省了大量测试异步方法的时间。

关于java - 如何使用 Mockito 测试不模拟对象的异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29273041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com