Eclipse JUnit4和gradle测试运行之间使用@EqualsAndHashCode的行为不一致

问题描述 投票:0回答:1

使用Eclipse JUnit和gradle测试运行单元测试时会得到不同的结果。有一个类:

@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测试成功了吗?我从Eclipse和命令行运行gradle测试,没有区别。所以,似乎某种程度上gradle更清楚如何处理@EqualsAndHashCode(onlyExplicitlyIncluded = true) ......?

我的compile 'org.projectlombok:lombok:1.18.2'中有build.gradle,我的Eclipse中安装了相同版本的lombok.jar。

gradle项目和Eclipse都使用JUnit版本4.12。我在这里错过了什么?

进一步调查:

我构建了与Maven相同的项目。令我惊讶的是,JUnit测试也通过了这个项目。

这有点像Eclipse gradle项目方面或其他一些gradle项目特定设置有问题吗?

java eclipse gradle junit lombok
1个回答
2
投票

您还需要更新lombok的Eclipse安装。您可以在“帮助”>“关于Eclipse”屏幕中验证已安装的版本。在白色区域,底线应通知您已安装的版本。

运行java -jar lombok.jar来更新您的安装。

© www.soinside.com 2019 - 2024. All rights reserved.