当前位置:  开发笔记 > 编程语言 > 正文

使用Mockito验证方法后没有调用任何内容

如何解决《使用Mockito验证方法后没有调用任何内容》经验,为你挑选了2个好方法。

我正在使用Mockito在Java中编写单元测试,我想验证某个方法是最后一个调用对象的方法.

我正在测试的代码中做这样的事情:

row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();

在我的模拟中,我并不关心我在行上编辑所有内容的顺序,但是在我保存它之后我不再尝试对它做任何事情是非常重要的.有没有办法做到这一点?

请注意,我不是在寻找verifyNoMoreInteractions:它不会确认saveToDatabase是最后调用的东西,如果我在没有显式验证的行上调用任何内容,它也会失败.我希望能够说出类似的话:

verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();

如果它有帮助,我将从JMock测试中切换到Mockito:

row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");

Kent Lai.. 56

我认为这需要更多的定制工作.

verify(row, new LastCall()).saveToDatabase();

然后

public class LastCall implements VerificationMode {
    public void verify(VerificationData data) {
        List invocations = data.getAllInvocations();
        InvocationMatcher matcher = data.getWanted();
        Invocation invocation = invocations.get(invocations.size() - 1);
        if (!matcher.matches(invocation)) throw new MockitoException("...");
    }
}

上一个答案:

你是对的.verifyNoMoreInteractions是您所需要的.

verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verify(row).editABunchMoreStuff();
verify(row).saveToDatabase();
verifyNoMoreInteractions(row);


Grofit.. 11

关于主题不是100%,但我只是想找到与验证相反的,这是唯一相关的结果,它最终我在Mockito.verifyZeroInteractions(mock)之后;

只是因为其他人最终在这里寻找这个......



1> Kent Lai..:

我认为这需要更多的定制工作.

verify(row, new LastCall()).saveToDatabase();

然后

public class LastCall implements VerificationMode {
    public void verify(VerificationData data) {
        List invocations = data.getAllInvocations();
        InvocationMatcher matcher = data.getWanted();
        Invocation invocation = invocations.get(invocations.size() - 1);
        if (!matcher.matches(invocation)) throw new MockitoException("...");
    }
}

上一个答案:

你是对的.verifyNoMoreInteractions是您所需要的.

verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verify(row).editABunchMoreStuff();
verify(row).saveToDatabase();
verifyNoMoreInteractions(row);



2> Grofit..:

关于主题不是100%,但我只是想找到与验证相反的,这是唯一相关的结果,它最终我在Mockito.verifyZeroInteractions(mock)之后;

只是因为其他人最终在这里寻找这个......

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有