@Test public void testEquals() throws Exception { // Объекты разные и начинка разная assertFalse(user1.equals(user2)); // Объекты разные, а начинка одинаковая. Хотя hashCode и равен у обоих объектов, но // на equals() это не влияет, т.к. он не переопределен. assertFalse(user1.equals(user3)); assertFalse(user1 == user3); assertTrue(user1.hashCode() == user3.hashCode()); // Один объект assertTrue(user1.equals(user1)); }
/** * Тестирование на HashMap * * @throws Exception */ @Test public void testOnHashMap() throws Exception { Map<UserHashcode, Picture> users = new HashMap<>(); users.put(user1, user1.getPicture()); assertTrue(users.containsKey(user1)); // user3 копия user1 но не содержится в ключах Map. Поиск идет по equals, а он не переопределен assertFalse(users.containsKey(user3)); // В Map есть только user1, но присутствует value для user3, // т.к. у класса Picture переопределены оба метода, хотя объекты pic1 и pic3 разные по ссылкам assertTrue(users.containsValue(pic3)); // Объекты разные, а хэш-коды - одинаковые assertFalse(pic1 == pic3); assertEquals(pic1.hashCode(), pic3.hashCode()); users.put(user2, user2.getPicture()); users.put(user3, user3.getPicture()); // user3 не перезатирает user1, т.к. ключи не равны по equals, а только по hashCode assertEquals(3, users.size()); }