我的测试类中有一个私有方法,该方法构造一个常用Bar
对象。Bar
构造函数someMethod()
在我的模拟对象中调用方法:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
在我的某些测试方法中someMethod
,该特定测试也调用了我要检查的方法。类似于以下内容:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
这将失败,因为模拟对象已someMethod
被调用两次。我不想让我的测试方法关心方法的副作用getBar()
,所以在末尾重置模拟对象是否合理getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
我问,因为文档建议重置模拟对象通常表示不良测试。但是,这对我来说感觉还可以。
另类
替代选择似乎是在调用:
verify(mockedObject, times(2)).someMethod();
在我看来,这迫使每个测试都知道对的期望getBar()
,但没有收获。