我似乎无法弄清楚如何使用 Mockito 模拟一个简单的 setter 方法。我有以下类(class):
class MyClass {
private SomeObject someObject;
public void setSomeObject(SomeObject someObject) {
this.someObject = someObject;
}
public someObject getSomeObject() {
return someObject;
}
}
现在我只想在调用“setSomeObject”时设置一个新的“SomeObject”实例。 setter 中的参数也应该被忽略。
我需要这样的东西:
MyClass mockedClass = mock(MyClass.class);
when(mockedClass.setSomeObject([ignoreWhatsInHere]))
.then(mockedClass.setSomeObject(new SomeObject();
但是,我似乎无法获得为此工作的语法。我只能使用 getters() 使模拟工作,因为这样我就可以返回一些东西。但是我不知道如何对 setters() 做同样的事情。
感谢所有帮助。
最佳答案
在测试返回 void 的方法(包括 setter)时,您应该能够使用 doThrow()|doAnswer()|doNothing()|doReturn()
系列方法执行适当的操作。所以不是
when(mockedObject.someMethod()).thenReturn(something)
你可以使用 doAnswer()
来返回一个自定义的 Answer 对象,尽管它不是很优雅,你最好还是使用一个 stub :
doAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
//whatever code you want to run when the method is called
return null;
}}).when(mockedObject).someMethod();
}
如果您尝试从同一个 getter 调用返回不同的值,您可能还想查看 mockito 的连续 stub 调用,这将允许您在第一次调用方法时抛出错误,以及然后从第二次调用返回一个对象。
参见 http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#12有关这两者的更多详细信息。
关于java - 如何覆盖 Mockito 中的 setter 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079326/