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.
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.