我已经阅读了很多文档,网上的例子,但仍然不知道如何去做。 (如果可以的话)。
我需要在其他线程调用的对象中测试一个方法,并且它需要时间。所以我最初的想法是创建一个间谍,覆盖方法并完成任务,但问题是,我无法从间谍访问测试方法变量。因此,我无法从测试方法中获取System.currentTimeMillis()
返回的值,并且可以在一段时间内获取它以获得差异。
我将编写一些描述情况的抽象代码,以便您更好地了解情况。
@Test
public void test()
{
Objectspied spy = Mockito.spy(new Objectspied(Parameters p));
long[] timesRetrieved = new long[numberOfCallsIExpect];
//here goes the tricky part
Mockito.doAnswer(new Answer<void>(){
@override
public methodCalledFromAnotherThread(int index)
{
//what i wish to do but can't do it
timesRetrieved[i] = System.currentTimeMilis();
}
}
).when(spy).methodCalledFromAnotherThread(anyInt);
//here initialize the thread who call it
//then proccess al time diferences and get sure they are what i've expected
}
public class AnotherThread
{
ObjectSpied reference;
public void run()
{
for (int i=0;i<repeat;i++)
{
reference.methodCalledFromAnotherThread(i);
Thread.sleep(1000);
}
}
}
我是Mockito的新手,所以我知道语法是完全错误的,但我可以自己修复,我需要知道的是:
答案 0 :(得分:0)
你应该这样做好。请确保:
1)您将数组标记为最终
2)正确实施答案界面方法
final long[] timesRetrieved = new long[size];
Mockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
int index = invocationOnMock.getArgumentAt(0, Integer.class);
timesRetrieved[index] = System.currentTimeMillis();;
return null;
}
}
).when(spy).methodCalledFromAnotherThread(Mockito.anyInt());