Junit:Assert.assertNotSame返回true,尽管两个字符串相等

时间:2015-09-04 19:58:42

标签: java junit assertions

我正在使用JUnit 4.12和PowerMock 1.6.2。我有以下代码:

import org.junit.Assert;
...
System.out.println("equals?" + obj.equals(myObj.getUser().getUserName()));
Assert.assertNotSame(obj.getUserName(), myObj.getUser().getUserName());

系统输出调用打印equals? true,但是以下断言行成功,如果字符串相等,我希望它失败。为什么assertNotSame不起作用,我应该使用的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

assertNotSame(a, b)检查a != b,即a和b不是对完全相同的对象的引用。这与测试a.equals(b)是假的非常不同,后者认为这两个字符串不具有相同的字符。

你应该使用

assertFalse(obj.getUserName().equals(myObj.getUser().getUserName()))

我建议使用AssertJ,它有几十个更具表现力的断言:

assertThat(myObj.getUser().getUserName()).isNotEqualTo(obj.getUserName());