使用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项目特定设置有问题吗?
您还需要更新lombok的Eclipse安装。您可以在“帮助”>“关于Eclipse”屏幕中验证已安装的版本。在白色区域,底线应通知您已安装的版本。
运行java -jar lombok.jar
来更新您的安装。