JUnit 无法与 Lombok 一起工作 - 注释处理似乎不适用于测试 类
JUnit not working with Lombok - annotation processing doesn't seem to work for test classes
我对 Lombok 和 JUnit 有疑问。
我正在使用最新的 IntelliJ Idea
,安装了 Lombok
插件并启用了注释处理。
我有一个实体class:
@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
注释处理似乎不起作用,但我不知道如何解决这个问题。
您使用的 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
可以在以下位置找到更多信息,
您使用了不正确的依赖项 testAnnotationProcessor
应该是 annotationProcessor
,参见 lombock-gradle doc。修复 gradle 文件后,您将能够使用终端构建它。
它也可能在 IDE 中仍然失败,因为 lombok 需要为 IDE 启用注释处理(检查你的 IDE 文档)。
正在替换
编译组:'org.projectlombok',名称:'lombok',版本:“${lombok_version}”
和
compileClasspath 组:'org.projectlombok',名称:'lombok',版本:“${lombok_version}”
对我有用!
我对 Lombok 和 JUnit 有疑问。
我正在使用最新的 IntelliJ Idea
,安装了 Lombok
插件并启用了注释处理。
我有一个实体class:
@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
注释处理似乎不起作用,但我不知道如何解决这个问题。
您使用的 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
可以在以下位置找到更多信息,
您使用了不正确的依赖项 testAnnotationProcessor
应该是 annotationProcessor
,参见 lombock-gradle doc。修复 gradle 文件后,您将能够使用终端构建它。
它也可能在 IDE 中仍然失败,因为 lombok 需要为 IDE 启用注释处理(检查你的 IDE 文档)。
正在替换
编译组:'org.projectlombok',名称:'lombok',版本:“${lombok_version}”
和
compileClasspath 组:'org.projectlombok',名称:'lombok',版本:“${lombok_version}”
对我有用!