Java 没有为Void方法调用修改传递对象的doAnswer()
用例: 我想用对象列表调用mock类的方法,并想修改传递的参数。如果我使用返回类型的方法,而不使用无效的返回方法,它就可以正常工作 测试方法:Java 没有为Void方法调用修改传递对象的doAnswer(),java,junit,mockito,Java,Junit,Mockito,用例: 我想用对象列表调用mock类的方法,并想修改传递的参数。如果我使用返回类型的方法,而不使用无效的返回方法,它就可以正常工作 测试方法: public class TestClass{ @Autowired PersistActivity activity; public void methodToTest(List<URLObject> urlObjects) {
public class TestClass{
@Autowired
PersistActivity activity;
public void methodToTest(List<URLObject> urlObjects) {
List<URLObject> urlObjects2PerformAction = new ArrayList<URLObject>();
for (URLObject urlObject : urlObjects) {
// Added this check to make sure, we are not running a previous
// activity which is successful.
if (urlObject.getRetryCountMap().get(currentActivityName) != null) {
urlObjects2PerformAction.add(urlObject);
}
}
boolean activityStatus = true;
try {
log.info("Calling activity " + currentActivityName + " with " + urlObjects2PerformAction);
activity.doActivity(urlObjects2PerformAction);
log.info("UrlObjects are " + urlObjects2PerformAction);
} catch (Exception e) {
//another set of actions.
}
for (URLObject urlObject : urlObjects) {
if (!urlObject.isActivitySuccessful()) {
// If complete call failed or partial data failed, update
log.info("Failed for message " + urlObject);
} else {
log.info("Passed for message " + urlObject);
}
}//end for
}//end method
}//end class
问题:
如果我将doActivity
方法的返回类型更改为List
而不是Void
,那么它将被调用并按预期工作(不更改测试代码)
我们是否需要对void方法进行一些更改?我已经在doAnswer中将其设置为返回void
任何帮助都将不胜感激。像这样将
Void
更改为Object
...
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
...
。。。
doAnswer(新答案){
@凌驾
公共对象应答(InvocationMock调用)抛出Throwable{
...
尝试删除以下行:
doNothing().when(activity).doActivity(Arrays.asList(urlObject1, urlObject2));
对我来说,它似乎有点与之前的
doAnswer
设置相反。嗨,大卫,为什么它会工作?方法的返回类型是无效的。你希望返回修改过的对象吗?虽然我尝试了,但它不起作用。我更改了对象的应答的返回类型,它像前面一样返回null。好吧,那么也许你的模拟对象实际上没有得到ting按照您认为的方式进行了注入。您能发布您的实际测试类吗?这样我们就可以找到bug了?看起来您试图重新键入它,并输入了一些错误(例如InjectMock的拼写),因此很难确定发生了什么。是的,我确实键入了它,假设存在一些高级别的问题。我添加了详细的方法。活动
是什么样子的?您有没有收到任何错误?此外,您的代码有一些编译错误和运行时错误-除非您打算用a替换URLObject
BC
everywhere?无论如何,你能发布你的实际代码吗?谢谢。如果我纠正编译问题,用ABC
替换URLObject
,并假设Activity
有一个void-doActivity(List-abcs)
方法,它对我有效,即ABC[0].activitySuccessful==false
。可能发生了什么事?@Jonathan谢谢你的时间。我可能做了一些愚蠢的事情,添加了最少的代码来理解流程。哎呀!:(我想这是一个复制粘贴,我不知道定义了两个操作!
doNothing().when(activity).doActivity(Arrays.asList(urlObject1, urlObject2));