Mos*_*lum 47 java unit-testing mocking mockito
我正在使用Mockito在Java中编写单元测试,我想验证某个方法是最后一个调用对象的方法.
我正在测试的代码中做这样的事情:
row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();
Run Code Online (Sandbox Code Playgroud)
在我的模拟中,我并不关心我在行上编辑所有内容的顺序,但是在我保存它之后我不再尝试对它做任何事情是非常重要的.有没有办法做到这一点?
请注意,我不是在寻找verifyNoMoreInteractions:它不会确认saveToDatabase是最后调用的东西,如果我在没有显式验证的行上调用任何内容,它也会失败.我希望能够说出类似的话:
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();
Run Code Online (Sandbox Code Playgroud)
如果它有帮助,我将从JMock测试中切换到Mockito:
row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
Run Code Online (Sandbox Code Playgroud)
Ken*_*Lai 56
我认为这需要更多的定制工作.
verify(row, new LastCall()).saveToDatabase();
Run Code Online (Sandbox Code Playgroud)
然后
public class LastCall implements VerificationMode {
public void verify(VerificationData data) {
List<Invocation> invocations = data.getAllInvocations();
InvocationMatcher matcher = data.getWanted();
Invocation invocation = invocations.get(invocations.size() - 1);
if (!matcher.matches(invocation)) throw new MockitoException("...");
}
}
Run Code Online (Sandbox Code Playgroud)
上一个答案:
你是对的.verifyNoMoreInteractions是您所需要的.
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verify(row).editABunchMoreStuff();
verify(row).saveToDatabase();
verifyNoMoreInteractions(row);
Run Code Online (Sandbox Code Playgroud)
Gro*_*fit 11
关于主题不是100%,但我只是想找到与验证相反的,这是唯一相关的结果,它最终我在Mockito.verifyZeroInteractions(mock)之后;
只是因为其他人最终在这里寻找这个......
归档时间: |
|
查看次数: |
44706 次 |
最近记录: |