JUnit与Lombok不兼容 - 注解处理似乎对测试类无效。

11

我在Lombok和JUnit方面遇到了问题。

我使用最新版本的IntelliJ Idea,并安装了Lombok插件并启用了注解处理功能。

我有一个实体类:

@Data
@Builder
@AllArgsConstructor
public class User {

    private String name;
    private String email;

}

build.gradle:

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.projectlombok', name: 'lombok', version: '1.18.10'
    testCompile group: 'org.projectlombok', name: 'lombok', version: '1.16.10'
    testAnnotationProcessor "org.projectlombok:lombok:1.18.10"
}

最后,测试用例:

@Test
public void whenCheckIfPresent_thenOk() {
    User user = User.builder().name("John").email("sf@sf.pl").build();
    Optional<User> opt = Optional.ofNullable(user);
    assertTrue(opt.isPresent());

    assertEquals(user.getEmail(), opt.get().getEmail());
}

当我尝试运行此测试时,我遇到以下错误:

IdeaProjects\Tutoriale\src\test\java\optionals\OptionalsTest.java:26: error: cannot find symbol
        User user = User.builder().name("John").email("sf@sf.pl").build();
                        ^
  symbol:   method builder()
  location: class User
IdeaProjects\Tutoriale\src\test\java\optionals\OptionalsTest.java:30: error: cannot find symbol
        assertEquals(user.getEmail(), opt.get().getEmail());
                         ^
  symbol:   method getEmail()
  location: variable user of type User
IdeaProjects\Tutoriale\src\test\java\optionals\OptionalsTest.java:30: error: cannot find symbol
        assertEquals(user.getEmail(), opt.get().getEmail());
                                               ^
  symbol:   method getEmail()
  location: class User

似乎注解处理不起作用,但我不知道如何修复。


这可能会对您有所帮助: https://palesz.wordpress.com/2011/12/03/howto-maven-lombok-and-aspectj-together/ - Naveen Goyal
3个回答

14

您正在使用哪个Gradle版本?这个问题出现在Gradle版本5.4.1中。

对于测试源集中的Lombok注释,您需要将Lombok添加到两个依赖配置中:

testCompileOnly '...' testAnnotationProcessor '...'

与compileOnly和annotationProcessor一样,第一个使注释可用于代码,第二个在编译期间激活注释处理。

您可以尝试以下依赖项:

    compileOnly 'org.projectlombok:lombok:1.18.8'
    annotationProcessor 'org.projectlombok:lombok:1.18.8'

参考资料:https://projectlombok.org/setup/gradleLombok文档

更多信息可以在下面的位置找到:

https://github.com/rzwitserloot/lombok/issues/1945


1
最终,在我尝试了其他相关问题的所有答案后,这个对我起作用了!添加annotationProcessor是缺失的关键因素:)。非常感谢! - motaa

3
您使用了错误的依赖 testAnnotationProcessor ,它应该是 annotationProcessor ,请参阅 lombok-gradle文档。修复gradle文件后,您就可以在终端上构建它了。另外,在IDE中仍可能失败,因为lombok需要为IDE启用注释处理(请查阅您的IDE文档)。

0

替换

compile group: 'org.projectlombok', name: 'lombok', version: "${lombok_version}"

compileClasspath group: 'org.projectlombok', name: 'lombok', version: "${lombok_version}"

对我有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接