我正在尝试测试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.IPREQUEST_TYPE_TOMO_RECON);
在方法调用之前,我会得到这样的例外
Wanted but not invoked:"
您尝试使用相同的测试方法测试两个执行路径。
您应该有单独的测试方法