我正在尝试使用Mockito编写一段代码进行单元测试。
每当给定类型的任何类调用某个方法时,我都需要返回一个模拟对象。
我在考虑以下内容,但我似乎无法让它发挥作用。
Mockito.when(Mockito.any((MyObject.class).myMethod(Mockito.anyString()))).thenReturn(mockedObject);
基本上每当MyObject的任何实例调用它的myMethod()方法时,我都想返回一个mockedObject。
知道这有可能吗?
答案 0 :(得分:2)
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(...)....
请注意,返回模拟的模拟通常不是关于生产代码设计的好兆头。它显示了耦合的迹象,特别是它意味着这个代码打破了
为了改善关注点分离并避免违反Demeter 的法则,你一定要按照告诉,不要问原则。
本书非常好读Growing Object Oriented Software Guided by Tests。
HTH