gpt4 book ai didi

java - 如何覆盖 Mockito 中的 setter 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:08 26 4
gpt4 key购买 nike

我似乎无法弄清楚如何使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com