Mockito异常:试图测试IF Conditon时丢失方法调用



我正在尝试测试IF条件使用时(),thenreturn(),但是当我运行测试案例时,即使我嘲笑了该类该方法已实现。

这是我要模拟的条件

     if(request.getProcessType() == IPRequest.IPREQUEST_TYPE_TOMO_RECON)//IPREQUEST_TYPE_TOMO_RECON=9, this is the condition I am trying to test    
      {
        params.setTubeAngle(accessor); //I am verifying if these methods are invoked
        params.setTomoFocalSpot(accessor);
      } 

这就是我检查IF条件

的方式
when(request.getProcessType()).thenReturn(IPRequest.IPREQUEST_TYPE_TOMO_RECON);
        Mockito.verify(ipImgParam,Mockito.times(3)).setTubeAngle(Mockito.any(AttributeExtractor.class));

我已经使用@mock宣言模拟了"请求",但仍然得到以下异常。

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
   Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
   It is a limitation of the mock engine.
    at  common.systemreprocessingservice.test.ImageParamsBuilderTest.testbuildProcessingInfoIf(ImageParamsBuilderTest.java:134)

我不确定我在做什么做错。谁能帮忙?

我不能写评论,这就是为什么在这里问。哪种对象是"请求"?如果它是最后一堂课的对象,那么您将需要PowerMockito嘲笑这一点。

另外,在使用@mock注释后,您是否在运行测试案例之前调用MockitoAnnotations.initMocks(testClass.class)方法?

以下链接讲述了您可以模拟对象的不同方式。https://blog.frankel.ch/initializing-your-mockito-mocks/#gsc.tab=0

   imageParamsBuilder.buildProcessingInfo(request, info);
    Mockito.verify(ipImgParam, Mockito.times(3)).fillYourSelf(Mockito.any(AttributeExtractor.class));
   when(request.getProcessType()).thenReturn(IPRequest.IPREQUEST_TYPE_TOMO_RECON);
    Mockito.verify(ipImgParam,Mockito.times(3)).setTubeAngle(Mockito.any(AttributeExtractor.class));

这里的第三行"为时已晚"。您必须在调用剪切之前配置模拟


它仍然无法解决我的问题

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.

在测试中:

when(TagAccessorFactory.getInstance()).thenReturn(tagAccessorFactoryMock);

您不能以这种方式模拟静态方法,您必须使用 powermockito s when()方法。

但是(再次)我认为使用 powermockito 是对不良设计的投降。您不应使用静态访问来获取依赖项,而应使用DI(使用DI框架手动或优选)将其传递到您的类中。


当我致电

when(request.getProcessType()).thenReturn(IPRequest.IPREQUES‌​‌​T_TYPE_TOMO_RECON)‌​; 

在方法调用之前,我会得到这样的例外

Wanted but not invoked:" 

您尝试使用相同的测试方法测试两个执行路径。

您应该有单独的测试方法

相关内容

  • 没有找到相关文章

最新更新