@RequiredArgsConstructor из lombok не справляется с инжектом бинов

У меня есть интеграционныe тесты, пароверяющие взаимодействие с бд, бд запускается через testcontainers

package com.example.rideservice.integration;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.DockerImageName;

@Testcontainers
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DataBaseContainerConfiguration {
    @Container
    private static MySQLContainer<?> mySQL = new MySQLContainer<>(DockerImageName.parse(
            "mysql:8"
    ));

    @BeforeAll
    static void beforeAll() {
        mySQL.start();
    }

    @AfterAll
    static void afterAll() {
        mySQL.stop();
    }

    @DynamicPropertySource
    static void configureProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", mySQL::getJdbcUrl);
        registry.add("spring.datasource.username", mySQL::getUsername);
        registry.add("spring.datasource.password", mySQL::getPassword);
        registry.add("mysql.driver", mySQL::getDriverClassName);
    }

}

Вот сам тест

package com.example.rideservice.integration;

import com.example.rideservice.dto.request.RideRequest;
import com.example.rideservice.dto.response.RideListResponse;
import com.example.rideservice.dto.response.RideResponse;
import com.example.rideservice.mapper.RideMapper;
import com.example.rideservice.model.Ride;
import com.example.rideservice.repository.RideRepository;
import com.example.rideservice.util.IntegrationTestUtil;
import io.restassured.http.ContentType;
import lombok.RequiredArgsConstructor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.http.HttpStatus;
import org.springframework.test.context.jdbc.Sql;

import java.util.List;
import java.util.Map;

import static com.example.rideservice.util.IntegrationTestUtil.*;
import static io.restassured.RestAssured.given;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

@Sql(
        scripts = {
                "classpath:sql/ride/delete-data.sql",
                "classpath:sql/ride/insert-data.sql"
        }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD
)
@RequiredArgsConstructor
public class RideIntegrationTest extends DataBaseContainerConfiguration {

    private final RideRepository rideRepository;
    private final RideMapper rideMapper;

    @LocalServerPort
    private int port;

    @Test
    void findAll_shouldReturnAllRides() {
        Page<Ride> ridePage = rideRepository.findAll(
                PageRequest.of(VALID_OFFSET - 1, VALID_LIMIT, Sort.by(VALID_TYPE))
        );

        List<RideResponse> expected = ridePage.stream()
                .map(rideMapper::fromEntityToResponse)
                .toList();

        var actual = given()
                .port(port)
                .when()
                .params(Map.of(
                        PAGE_PARAM_NAME, VALID_OFFSET,
                        SIZE_PARAM_NAME, VALID_LIMIT,
                        ORDER_BY_PARAM_NAME, VALID_TYPE)
                )
                .get(IntegrationTestUtil.PATH_PAGE)
                .then()
                .statusCode(HttpStatus.OK.value())
                .extract().body().jsonPath().getList("rideList", RideResponse.class);

        assertThat(actual).isEqualTo(expected);
    }

    @Test
    void findRideById_shouldReturnRideResponse_whenRideExist() {
        Ride ride = rideRepository.findById(DEFAULT_ID).get();
        RideResponse expected = rideMapper.fromEntityToResponse(ride);

        var actual = given()
                .port(port)
                .pathParam(ID, DEFAULT_ID)
                .when()
                .get(PATH_ID)
                .then()
                .statusCode(HttpStatus.OK.value())
                .extract()
                .as(RideResponse.class);

        assertThat(actual).isEqualTo(expected);
    }

    @Test
    void createRide_shouldReturnRideResponse_whenRideValid() {
        RideResponse expected = getDefaultRideResponse();
        RideRequest rideRequest = getDefaultRideRequest();

        var actual = given()
                .port(port)
                .contentType(ContentType.JSON)
                .body(rideRequest)
                .when()
                .post(PATH_DEFAULT)
                .then()
                .statusCode(HttpStatus.CREATED.value())
                .extract()
                .as(RideResponse.class);

        assertThat(actual).isEqualTo(expected);
    }

    @Test
    void startRide_shouldReturnRideResponse_whenRideExist() {

        var actual = given()
                .port(port)
                .pathParam(ID, DEFAULT_ID)
                .when()
                .put(PATH_START)
                .then()
                .statusCode(HttpStatus.OK.value())
                .extract()
                .as(RideResponse.class);

        assertThat(actual.getStartDate()).isNotNull();
    }

    @Test
    void getAllRidesByPassengerId_shouldReturnRideListResponse() {
        List<Ride> rideList = rideRepository.getAllByPassengerId(DEFAULT_ID);
        List<RideResponse> rideResponses = rideList.stream()
                .map(rideMapper::fromEntityToResponse)
                .toList();

        RideListResponse expected = new RideListResponse(rideResponses);


        var actual = given()
                .port(port)
                .pathParam(ID, DEFAULT_ID)
                .when()
                .get(PATH_GET_BY_PASSENGER)
                .then()
                .statusCode(HttpStatus.OK.value())
                .extract()
                .as(RideListResponse.class);

        assertThat(actual).isEqualTo(expected);
    }

    @Test
    void getAllRidesByDriverId_shouldReturnRideListResponse() {
        List<Ride> rideList = rideRepository.getAllByDriverId(DEFAULT_ID);
        List<RideResponse> rideResponses = rideList.stream()
                .map(rideMapper::fromEntityToResponse)
                .toList();

        RideListResponse expected = new RideListResponse(rideResponses);

        var actual = given()
                .port(port)
                .pathParam(ID, DEFAULT_ID)
                .when()
                .get(PATH_GET_BY_DRIVER)
                .then()
                .statusCode(HttpStatus.OK.value())
                .extract()
                .as(RideListResponse.class);

        assertThat(actual).isEqualTo(expected);
    }

    @Test
    void endRide_shouldReturnRideResponse_whenRideExist() {
        var actual = given()
                .port(port)
                .pathParam(ID, DEFAULT_ID)
                .when()
                .put(PATH_END)
                .then()
                .statusCode(HttpStatus.OK.value())
                .extract()
                .as(RideResponse.class);

        assertThat(actual.getEndDate()).isNotNull();
    }


}

Проблема состоит в инжекте репозитория и мапера ,a именно @RequiredArgsConstructor когда я использую ее то у меня вылетает ошибка на этапе прохождения тестов

org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [final com.example.rideservice.repository.RideRepository rideRepository] in constructor [public com.example.rideservice.integration.RideIntegrationTest(com.example.rideservice.repository.RideRepository,com.example.rideservice.mapper.RideMapper)].

    at java.base/java.util.Optional.orElseGet(Optional.java:364)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Но стоит мне поставить @RequiredArgsConstructor(onConstructor = @__(@Autowired)) то все работает. Почему так происходит?


Ответы (0 шт):