Porównanie wartości metod hashCode() dla obiektów

0

Mam klasę https://github.com/JonkiPro/popcorn/blob/develop/popcorn-common/src/main/java/com/jonki/popcorn/common/dto/Contribution.java, która dziedziczy z https://github.com/JonkiPro/popcorn/blob/develop/popcorn-common/src/main/java/com/jonki/popcorn/common/dto/BaseDTO.java. Chcę stworzyć test dla porównania wartości z hash code dla kilku obiektów.

@Test
public void canUseHashCode() {
    final Contribution.Builder builder = new Contribution.Builder(
            MOVIE_ID,
            MOVIE_TITLE,
            OWNER,
            STATUS,
            FIELD,
            SOURCES,
            CREATION_DATE
    );
    builder.withUserComment(null);
    builder.withVerificationDate(null);
    builder.withVerificationUser(null);
    builder.withVerificationComment(null);
    builder.withId(RandomSupplier.STRING.get());
    final Contribution contribution1 = builder.build();
    final Contribution contribution2 = builder.build();
    builder.withId(RandomSupplier.STRING.get());
    final Contribution contribution3 = builder.build();

    Assert.assertEquals(contribution1.hashCode(), contribution2.hashCode());
    Assert.assertNotEquals(contribution1.hashCode(), contribution3.hashCode()); // tutaj jest błąd, bo wskazuje, że wartości są takie same
}

po uruchomieniu testu otrzymuję błąd

java.lang.AssertionError: Values should be different. Actual: -1997596065

Nie wiem dlaczego, skoro pole id jest zmienione dla trzeciego obiektu, to dlaczego hashCode jest taki sam?

0

Gdzie przesłaniasz metodę hashCode z klasy Object?

0

Adnotacja @EqualsAndHashCode z lombok generuje metody equals i hashCode.

0

Twój RandomSupplier zwraca to samo za każdym razem. Tworzysz supplier randomujac a następnie robiac toString, a potem robiac get() tylko pobierasz tę wartość w kółko, nie randomujesz od nowa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1