Разница между assertEquals и assertSame в JUnit
Утвердитьравно
Утверждает, что ожидаемые и фактические объекты равны.
Он использует метод equals() для проверки равенства объектов. Для примитивов используется оператор равенства.
Ниже приведен код из JUnit 5:
// code from Junit for objects static boolean objectsAreEqual(Object obj1, Object obj2) { if (obj1 == null) { return obj2 == null; } else { return obj1.equals(obj2); } } // code from Junit for primitives static void assertEquals(int expected, int actual, String message) { if (expected != actual) { AssertionUtils.failNotEqual(expected, actual, message); } }
assertSame
Утверждает, что ожидаемое и фактическое относятся к одному и тому же объекту.
Он использует оператор равенства для проверки того, что и фактическое, и ожидаемое значение указывают на один и тот же объект.
Ниже приведен код из JUnit 5:
static void assertSame(Object expected, Object actual, String message) { if (expected != actual) { failNotSame(expected, actual, message); } }
Пример
class TestAssertEqualsAndSame { @Test void testAssertEquals() { assertEquals("1", "1"); // assertion will pass assertEquals("1", new String("1")); // assertion will pass assertEquals(new String("1"), new String("1")); // assertion will pass } @Test void testAssertSame() { // assertion will pass assertSame("1", "1"); /* assertion will fail because the references of both objects are different. new String("<your string>") will create a new object */ assertSame("1", new String("1")); // assertion will fail because the references of both objects are different assertSame(new String("1"), new String("1")); } }
Не стесняйтесь задавать любые вопросы или делиться любыми комментариями, которые у вас есть по поводу статьи.