@Test
public void testTimeoutFunction() throws Exception {
Response response = getResponseForTest();
when(requestAdapter.transform(itemRequest)).thenReturn(Request);
when(dataProvider
.provide(any(Request.class)))
.thenAnswer((Answer<Response>) invocation -> {
Thread.sleep(1000000);
return response;
});
processor = spy(getProcessor());
when(itemRequest.getRequestContext()).thenReturn(itemRequestContext);
when(itemRequestContext.getMetadata()).thenReturn(requestContextMetadata);
List<Item> output = processor.getItemist(ITEM_ID, itemRequest);
assertTrue(output.isEmpty());
verify(processor, times(1)).processRequest(Request);
verify(processor, times(1)).responseTimedOutCount();
}
public class Process {
@VisibleForTesting
void responseTimedOutCount() {
//log metrics
}
private CompletableFuture<Response> getResponseAsync(final ScheduledExecutorService delayer,
final ItemRequest itemRequest) {
return timeoutWithTimeoutFunction(delayer, EXECUTION_TIMEOUT, TimeUnit.MILLISECONDS,
CompletableFuture.supplyAsync(() -> getResponseWithTimeoutFunction(itemRequest), executorService),
Response.emptyResponse(), () -> responseTimedOutCount());
}
private Response getResponseWithTimeoutFunction(final ItemRequest itemRequest) {
//do something and return response
}
public List<Item> getItemList(final String id, final ItemRequest itemRequest) throws Exception {
final ScheduledExecutorService delayer = Executors.newScheduledThreadPool(1);
Response response;
if(validateItemId(id){
try {
response = getResponseAsync(delayer, itemRequest).get();
} catch (final Throwable t) {
response = Response.emptyResponse();
} finally {
delayer.shutdown();
}
return transform(response, id).getItems();
} else {
return null;
}
}
}
public static <T> CompletableFuture<T> timeoutWithTimeoutFunction(final ScheduledExecutorService es,
final long timeout,
final TimeUnit unit,
final CompletableFuture<T> f,
final T defaultValue,
final Runnable r) {
final Runnable timeoutFunction = () -> {
boolean timedOut = f.complete(defaultValue);
if (timedOut && r != null) {
r.run();
}
};
es.schedule(timeoutFunction, timeout, unit);
return f;
}
Junit异常:
Wanted but not invoked: process.responseTimedOutCount(); -> at processTest.testTimeoutFunction(processTest.java:377)
However, there were exactly 3 interactions with this mock:
process.getItemList( ITEM_ID, itemRequest ); -> at processTest.testTimeoutFunction(processTest.java:373)
process.validateItemId( ITEM_ID ); -> at process.getItemList(process.java:133)
process.processRequest( request ); -> at process.getResponseWithTimeoutFunction(process.java:170)
要测试超时,您可能想要模拟要测试超时的调用。相对于它应该永远进行的测试的持续时间。
when(dataProvider
.provide(any(Request.class)))
.thenAnswer((Answer<Response>) invocation -> {
Thread.sleep(FOREVER);
return response;
});
验证应该有一个线程处理超时。当超时很长时,您可能应该确保它是可配置的,以允许快速测试。类似验证(mock,timeout(LONGER_THAN_REAL_TIMEOUT)).someCall()
确保在总测试持续时间上设置一个超时时间,以确保当前或未来的失败不会减慢您的构建速度。
当我试图通过传递强制转换的值来模拟重载的方法时,我得到了以下错误。 例如,为了模拟 我正在做 但是当我运行测试用例时,我会得到以下错误 为什么要调用,甚至在专门调用了之后? 附加详细信息 logWarn的定义
我是摩基托的新手,不明白这是什么问题。而且你能不能说我,如何做Mockito单位正确,因为我真的不能理解他们!更新的错误和测试类 我有下一个例外: 下面是我的DAO类:
我只是想问问我的单位。测试错误,所以我有单元。像下面这样的测试,当我运行这个测试时,我得到了想要的错误,但没有被调用:实际上,这个模拟没有任何交互。重点是我想测试我从api请求的数据是否成功显示。 在gradle中,我已经实现了 组织。mockito:mockito核心:2.21.0 组织。mockito:mockito内联:2.21.0 我的单元测试是这样的,我用mockito做测试: 错误详细
晚安, 我正在对我的服务进行一些测试,在删除方法中执行测试时遇到了问题。 我想知道是否有人犯过这个错误,可以帮助我。 我扫描时出错。据报道,该方法没有使用。 例外情况: 代码:
MyDriveRepository.getMyDriveItemSelectedPathuri一直返回null。我试着查看以下链接,但没有找到解决问题的方法。
我尝试了例外情况下给出的解决方案:mockito想要但没有调用,实际上与这个mock没有任何交互,而这个mockito也想要但没有调用:实际上,与这个mock没有任何交互但仍然得到相同的错误。我是不是漏掉了什么?以下是me的实现:-