Junit: Assert.assertNotSame возвращает true, несмотря на то, что две строки равны

Я использую 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 ответ

Решение

assertNotSame(a, b) проверяет, что a != bто есть, что a и b не являются ссылками на один и тот же объект. Это сильно отличается от тестирования a.equals(b) Значение false, что говорит о том, что две строки не имеют одинаковых символов.

Вы должны использовать

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

Я бы порекомендовал использовать AssertJ, который имеет десятки гораздо более выразительных утверждений:

assertThat(myObj.getUser().getUserName()).isNotEqualTo(obj.getUserName());
Другие вопросы по тегам