我正在尝试为我正在使用Mockito编写的一段代码编写单元测试。
我需要在任何给定类型的类调用某个方法时返回一个模拟对象。
我在想下面的事情,但我似乎不能让它工作。
Mockito.when(Mockito.any((MyObject.class).myMethod(Mockito.anyString()))).thenReturn(mockedObject);
基本上任何时候MyObject的任何实例调用它的myMethod()方法,我想返回一个mockedObject。
有人知道这是可能的吗?
Mockito不是这样工作的。使用Mockito,您将创建一个模拟实例,并将其传递给模拟的测试客户端代码。
MyObject mo = mock(MyObject.class);
@Before public void init() {
// inject mo to the tested code
}
@Test public void ensure_client_code_notify_my_object() {
// given
when(mo.myMethod(anyString()))).thenReturn(anotherMock);
// when
client.theTestedAPI();
// then
// verify(...)....
// assertThat(...)....
请注意,对于生产代码的设计来说,mock返回一个mock通常不是一个好兆头。它显示了耦合的迹象,特别是它意味着这段代码违反了得墨忒耳定律。
要改善关注点分离,避免违反Demeter的定律,您绝对应该遵循告诉,不要问原则。
这本书是一本很好的读物。
HTH