Разница между 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"));
 }
}

Не стесняйтесь задавать любые вопросы или делиться любыми комментариями, которые у вас есть по поводу статьи.