Несовместимое поведение с @EqualsAndHashCode между Eclipse JUnit4 и прогоном теста gradle - PullRequest
0 голосов
/ 10 сентября 2018

Я получаю разные результаты при запуске модульных тестов с Eclipse JUnit и gradle test.Имея класс вроде:

@Getter @Setter
@EqualsAndHashCode
public class ObjectWithId {
    private Long id;
}

и тест как (сжатые случаи в один тест для экономии места):

@Test
public void testObjectWithId() {

    ObjectWithId o1 = new ObjectWithId(), o2 = new ObjectWithId();
    o1.setId(1L);
    o2.setId(1L);
    assertEquals(o1.hashCode(), o2.hashCode());
    assertEquals(o1, o2);

    o2.setId(2L);
    assertNotEquals(o1, o2);
    assertNotEquals(o1.hashCode(), o2.hashCode());

}

все идет нормально, как и ожидалось.

Затем, имея такой класс, как:

@Getter @Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class ObjectWithIdAndDate {

    @EqualsAndHashCode.Include
    private Long id;

    private LocalDateTime created;

}

с тестом, подобным:

@Test
public void testObjectWithIdAndDate() {

    ObjectWithIdAndDate o1 = new ObjectWithIdAndDate(), o2 = new ObjectWithIdAndDate();
    o1.setId(1L);
    o2.setId(1L);
    assertEquals(o1.hashCode(), o2.hashCode());
    assertEquals(o1, o2);

    o2.setId(2L);
    assertNotEquals(o1, o2);
    assertNotEquals(o1.hashCode(), o2.hashCode());

    o2.setId(1L);
    o2.setCreated(LocalDateTime.now());
    // Eclipse JUnit starts failing here because setting the created.
    // Gradle test will pass.
    assertEquals(o1.hashCode(), o2.hashCode());
    assertEquals(o1, o2);

    o1.setCreated(LocalDateTime.now());
    assertEquals(o1.hashCode(), o2.hashCode());
    assertEquals(o1, o2);

}

, он завершится неудачно при работе с Eclipse JUnit, но завершится успешно с тестом gradle?Я запускаю тест gradle как из Eclipse, так и из командной строки, без разницы.Итак, похоже, что каким-то образом gradle знает лучше, как @EqualsAndHashCode(onlyExplicitlyIncluded = true) следует относиться ...?

У меня compile 'org.projectlombok:lombok:1.18.2' в моем build.gradle и такая же версия lombok.jar установлена ​​в моем Eclipse.

И Gradle Project, и Eclipse используют JUnit версии 4.12.Что мне здесь не хватает?

Некоторые дальнейшие исследования:

Я построил идентичный в остальном проект, но с Maven.К моему удивлению, тест JUnit также проходит с этим проектом.

Этот запах пахнет так, как будто что-то не так с фасетом град-проекта Eclipse или каким-либо другим специфическим параметром град-проекта?

1 Ответ

0 голосов
/ 11 сентября 2018

Вам также необходимо обновить Eclipse-установку lombok.Вы можете проверить установленную версию в окне «Справка»> «Об Eclipse».В белой области нижняя строка должна информировать вас об установленной версии.

Запустите java -jar lombok.jar для обновления ваших установок.

...