javaunit-testingjunitlombokannotation-processing

JUnit not working with Lombok - annotation processing doesn't seem to work for test classes


I have a problem with Lombok and JUnit.

I am using IntelliJ Idea, the latest one, with Lombok plugin installed and annotation processing enabled.

I have an entity 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"
}

And finally, the test case:

@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());
}

When I am trying to run this test I get below error:

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

It seems that annotation processing isn't working, but I have no idea how to fix this.


Solution

  • What Gradle version are you using? This issue was seen in Gradle version 5.4.1.

    For Lombok annotations in test source sets, you need to add Lombok to two dependency configurations:

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

    In the same way, as compileOnly and annotationProcessor, the first one makes the annotations available to the code and the second one activates annotation processing during compilation

    You could try the dependency as below,

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

    Reference: https://projectlombok.org/setup/gradleLombok doc

    More information can be found in the below location,

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