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

标签 java mockito setter overwrite

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

相关文章:

java - Redis:具有大小限制和 LRU 驱逐功能的 HashMap

android - 尝试模拟 NavController 时出错

java - 当需要在每个 setter 中使用相同的条件运算符时如何保持干燥?

hibernate - 为什么Grails/GORM/Hibernate在.save()上击中我的二传手,并且该怎么办?

java - Javafx在特定条件下每10毫秒触发一个事件

java - 使用 JPA 选择非实体?

java - Android ListView 适配器无法与 Parse SDK 一起使用

java - Mockito Spy doReturn 调用原始方法

android - 无法使用 Mockito 模拟 WebView

struct - 为什么我的 setter 不在匿名结构字段上工作?