【问题标题】:JUnit not working with Lombok - annotation processing doesn't seem to work for test classesJUnit 不适用于 Lombok - 注释处理似乎不适用于测试类
【发布时间】:2020-04-13 01:16:13
【问题描述】:

我对 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

似乎注释处理不起作用,但我不知道如何解决这个问题。

【问题讨论】:

标签: java unit-testing junit lombok annotation-processing


【解决方案1】:

您使用的是什么 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 doc

更多信息可以在以下位置找到,

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

【讨论】:

    【解决方案2】:

    您使用了不正确的依赖项testAnnotationProcessor,它应该是annotationProcessor,请参阅lombock-gradle doc。修复 gradle 文件后,您将能够使用终端构建它。 此外,由于 lombok 需要为 IDE 启用注释处理,它仍然可能在 IDE 中失败(检查您的 IDE 文档)。

    【讨论】:

      【解决方案3】:

      更换

      编译组:'org.projectlombok',名称:'lombok',版本:“${lombok_version}”

      compileClasspath 组:'org.projectlombok',名称:'lombok',版本:“${lombok_version}”

      为我工作!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-12
        • 2018-09-07
        • 2015-08-15
        • 1970-01-01
        相关资源
        最近更新 更多