Java 没有为Void方法调用修改传递对象的doAnswer()

Java 没有为Void方法调用修改传递对象的doAnswer(),java,junit,mockito,Java,Junit,Mockito,用例: 我想用对象列表调用mock类的方法,并想修改传递的参数。如果我使用返回类型的方法,而不使用无效的返回方法,它就可以正常工作 测试方法: public class TestClass{ @Autowired PersistActivity activity; public void methodToTest(List<URLObject> urlObjects) {

用例:

我想用对象列表调用mock类的方法,并想修改传递的参数。如果我使用返回类型的方法,而不使用无效的返回方法,它就可以正常工作

测试方法:

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