所以我有以下问题:
我有一个类,我创建了它的三个对象(obj1, obj2, obj3)。我通过Testclass中的setter方法为它们赋了不同的值,因为它们将在后面的列表中使用。
问题是,类有一个方法,它返回一个布尔值,它通过SAP-Services获得值,当然我不想嘲笑。当然,我想使用来自Mockito的when-方法来确保,它们返回不同的值,因为我想测试的类,根据它们在方法上返回的值对文件进行排序。
when(obj1.method()).thenReturn(true);
when(obj2.method()).thenReturn(false);
when(obj3.method()).thenReturn(true);
要做到这一点,我需要模拟对象:
@mock
private Object obj1;
和在我的setUp中:
obj1 = mock(Object.class);
但是当我这样做时,它不允许我为对象设置值。
我如何做到这一点,尽管如此,我需要用一些东西填充对象,我不能让它们空白。只是没有其他方法可以设置方法的返回值,只能模拟对象。
如果只想模拟对象的某些方法,可以使用@Spy不过,在这种情况下,该方法的模拟方式应该有所不同doReturn(真正的)当(其中obj1) .method ();
详情请参阅http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html
不要同时使用@Mock obj1
和obj1 = mock(Object.class);
…它们都在做同样的事情,其中一个覆盖了另一个。
如果你使用@RunWith(MockitoJunitRunner.class)
和@Mock
,你不需要mock(...)
(大多数时候)。
另外,我怀疑obj1
应该是Object类型,我猜它应该是一个更具体的接口类型