有没有办法在Mockito中通过引用匹配并在同一时间平等?

时间:2015-05-15 07:55:49

标签: java unit-testing mockito

Mockito Matcherseq()使用equalssame()使用==运算符。

在比较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而不是替代。

2 个答案:

答案 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