Reputation: 4164
I'm encountering the following error when running my project as a unit test configuration in IntelliJ:
/Users/francislainycampos/IdeaProjects/so-be-automation/src/test/java/com/francislainy/sobeautomation/steps/MySteps.java:14:30
java: variable restClient not initialized in the default constructor
However, the same tests work fine when I run mvn test
from the terminal.
@Slf4j
@Component
@AllArgsConstructor
public class RestClient {
public RequestSpecification getRequestSpecification() {
// Rest Assured config here
}
}
@CucumberContextConfiguration
@SpringBootTest(classes = TestConfig.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CucumberSpringConfiguration {}
@ComponentScan(basePackages = {"com.francislainy.sobeautomation"})
@EnableAutoConfiguration
public class TestConfig {}
@RequiredArgsConstructor
public class MySteps {
private final RestClient restClient;
private Response response;
@Given("I send a GET request to the Bored API")
public void iSendAGETRequestToTheBoredAPI() {
response = restClient.getRequestSpecification().get("https://www.boredapi.com/api/activity");
}
}
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Settings > Build, Execution, Deployment > Compiler > Annotation Processors
).MySteps.java
, the issue is resolved:compile
or left it as the default scope not specified.However, the only workaround I've found so far is to remove the @RequiredArgsAnnotation
and explicitly define a constructor for my variable.
public class MySteps {
private final RestClient restClient;
private Response response;
public MySteps(RestClient restClient) {
this.restClient = restClient;
}
}
Why does @RequiredArgsConstructor
fail to initialize restClient
when running the tests in IntelliJ's unit test configuration, but works fine with mvn test
? Is there a way to ensure the Lombok-generated constructor works correctly in both scenarios?
https://github.com/francislainy/so-be-automation
Thank you.
Upvotes: 2
Views: 80
Reputation: 1122
The problem was in the Processor path
- version of Lombok was unknown
.
You need to set Processor path
to the path of Lombok with the version you are using in your project.
Also no need to have enabled IntelliJ IDEA's Lombok
plugin.
For example, I have $HOME/.m2/repository/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar
.
The config so-be-automation/.idea/compiler.xml
should look like this:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Annotation profile for so-be-automation" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar" />
</processorPath>
<module name="so-be-automation" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="so-be-automation" options="-parameters" />
</option>
</component>
</project>
Upvotes: 1
Reputation: 4164
Based on the conversation with @Geba, this is what has fixed the issue.
Changing Annotation profile from using Processor path
To using Obtain processor from project classpath.
Upvotes: 1