【发布时间】:2017-04-03 06:23:47
【问题描述】:
我有一个方法有另一个方法调用,它的定义有一个 SomeIntegerObject.wait() 调用。现在,当我运行我的测试用例时,由于这种等待方法,测试用例一直在等待并且不执行。
我尝试在 @Test 注释处添加超时,但这会导致“测试超时”之类的异常。
测试方法:
private PastingResult result;
public PastingResult pasteImages(IIOImage[] images, byte pasteProcessType){
result = new PastingResult();
_reprocessingProvider.setListLogicHandler(this);
//--some more method calls--
waitForResult(); //causes my test case to wait forever and pauses execution
return result;
}
测试用例:
@Test
public void testPasteImagesIIOImageArrayByte() throws Exception
{
ReprocessManager _reprocessingProvider1=Mockito.mock(ReprocessManager.class);
Whitebox.setInternalState(imagePasterIfImpl, "_reprocessingProvider", _reprocessingProvider1);
IIOImage[] images=new IIOImage[]{Mockito.mock(IIOImage.class),Mockito.mock(IIOImage.class)};
byte pasteProcessType = 02;
PastingResult result= imagePasterIfImpl.pasteImages(images, pasteProcessType);
Mockito.verify(_reprocessingProvider1).setListLogicHandler(imagePasterIfImpl);
System.out.println(result+"is the result");
}
waitForResult();的定义
private Integer processingWaitMonitor = new Integer(0);
private void waitForResult() {
// synchronize to wait on the Monitor..
synchronized(processingWaitMonitor) {
try {
processingWaitMonitor.wait();
}
catch(Exception e) {
System.out.println("Exception during Wait !"+e);
}
}
}
【问题讨论】:
-
那么,您希望/希望在您的情况下做什么?即使代码没有等待,也让测试成功?
-
我想验证测试方法中发生的所有方法调用,但是测试用例本身并没有执行,它只是一直在等待
-
无论如何,好问题!
-
@hushie 你是什么意思“我想验证所有方法调用?”,测试用例如何失败并出现“测试超时”?
-
@AmberBeriwal 我正在为上面提到的方法编写一个测试用例,因此在该方法中有一些方法调用,当我验证这些调用时,
waitForResult();调用会停止执行我的测试用例。当我刚刚尝试在 @Test 注释处添加 1000 毫秒的超时时发生了“测试超时异常”,因此我删除了超时。
标签: java multithreading unit-testing junit mockito