在使用Mockito的呼叫之间进行验证时间



我已经阅读了很多文档,网上的示例,但仍然不知道如何做。(如果可以完成)。

我需要在其他线程调用的对象中测试一种方法,并且需要时间。因此,我最初的想法是创建间谍,覆盖方法并执行任务,但是问题是,我无法从间谍中访问测试方法变量。因此,我无法从测试方法中从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的新手,所以我知道语法是完全错误的,但我可以自己解决,我需要知道的是:

  • 有什么方法可以使用Mockito做到这一点?
  • 如果是这样,您能指出我的方向正确吗?

您应该这样做。只需确保:

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());

相关内容

  • 没有找到相关文章

最新更新