Mockito Matchers
有eq()
使用equals
和same()
使用==
运算符。
在比较Mockito
中的对象时,有没有办法同时使用它们?
我们说我们有
List list1 = new ArrayList();
List list2 = new ArrayList();
System.out.println(list1.equals(list2)); //true
System.out.println(list1 == list2); //false
/* and I want to check that the references are the same,
and the list contents haven't changed */
因此,让==
和.equals()
如果要检查返回是否是相同的列表,并且列表内容相同而不进行2次断言,这将派上用场。
此外,这可能是4卡问题的典型示例。 https://en.wikipedia.org/wiki/Wason_selection_task
即使对象没有相同的引用, .equals()
也可以为真。
因此.equals()
为真并不意味着==
会返回true而不是替代。
答案 0 :(得分:1)
equals
实施应该进行==
检查。如果不是,我会认为这是一个错误。所以两者都没有必要。如果你让eclipse生成equals
,那么第一个测试就是==
检查。
同样适用于List,这是equals
的{{1}}:
AbstractList
答案 1 :(得分:0)
我没有任何配置就成功了。这是代码:
public class MockedObject {
public String foo(List list) {
throw new RuntimeException("foo");
}
}
public class User {
public void boo(MockedObject object, List list1) {
System.out.println(object.foo(new ArrayList()));
}
}
@RunWith(MockitoJUnitRunner.class)
public class UserTest {
@Mock
MockedObject mockedObject;
@Test
public void testUser() throws Exception {
List list1 = new ArrayList();
List list2 = new ArrayList();
when(mockedObject.foo(list1)).thenReturn("mocked");
User user = new User();
user.boo(mockedObject, list1);
user.boo(mockedObject, list2);
}
}
测试通过,输出为:
mocked
mocked