我试图测试一个if条件,使用时(),然后返回(),但是当我运行我的测试用例时,它会给我丢失的方法调用,即使我已经嘲笑了实现该方法的类。
这就是我想嘲笑的如果条件
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 annotation模拟了“request”,但仍然得到下面的异常。
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)
我不确定我做错了什么。有人能帮忙吗?
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);
不能用这种方式模拟静态方法,必须使用PowerMockitoswhen()
method。
但是,(再一次)我认为使用PowerMockito作为对糟糕设计的屈服。您不应该使用静态访问来获取依赖项,而是应该使用DI(手动或最好使用DI框架)将它们传递到类中。
当我打电话给
when(request.getProcessType()).thenReturn(IPRequest.IPREQUEST_TYPE_TOMO_RECON);
在方法调用之前,我得到了这样的异常
Wanted but not invoked:"
您尝试使用相同的测试方法测试两个执行路径。
你应该有单独的测试方法
我不能写评论,这就是为什么在这里问。“请求”是什么样的对象?如果它是最后一个类的对象,那么需要PowerMockito来模拟它。
另外,在使用@Mock注释之后,您是否在运行测试用例之前调用了MockitoAnnotations.initMocks(testClass.class)
方法?
下面的链接介绍了模拟对象的不同方式。https://blog.frankel.ch/initializing-your-mockito-mocks/#gsc.tab=0
我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?
我已经使用Groovy几年了,但不是在最近几个月,所以这可能只是一个新手问题。我试图解析日志文件,但当我尝试这样做时: 我得到了这个例外: 线程“main”groovy.lang.missingmethodException中的异常:方法:java.text.SimpleDateFormat.parse()的签名不适用于参数类型:(java.lang.string,ce.readscript.tm
我应该如何测试异常?我可以mock connector并且我可以赋予它抛出异常的行为,但是我不明白下一步该怎么做。
问题内容: 我有一个带有返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? 问题答案: 括号放置不正确。 您需要使用: 而 不是 使用: 在文档中对此进行了解释
我在尝试从SOAPUI调用服务时遇到以下异常。当我在浏览器中打开endpoint时,它会显示wsdl fine。 我的wsdl在was 7服务器中 我在中的Soap请求: 肥皂UI中的肥皂反应: 这就是我配置jaxws:endpoint的方式
我有一个简单的类,它基于一个简单的规则构建一个。 如果在数据库中找到,则使用该元数据生成消息 这是这门课和一个斯波克测试。测试失败时,出现,表示无法找到使用该服务创建的。 我真的很想理解为什么这不起作用。我非常感谢在成功测试这项测试中得到的任何帮助。非常感谢。