es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring Boot Test: bean no ha sido inyectado.

Aquí está mi ubicación de prueba:

src/test/java
└── cat
    └── gencat
        └── catsalut
            └── hes
                └── mpi
                    └── unit
                        └── mapper
                            └── PatientMapperTest.java

PatientMapperTest.java es:

@SpringBootTest
@RequiredArgsConstructor
public class Patient {

    private final TypesMapper typesMapper;

    @Test
    void test() {
        assertNull(this.typesMapper);
    }
}

También he probado este código (eliminando la anotación de Lombok e inicializando explícitamente el campo typesMapper):

@SpringBootTest
public class PatientMapperTest {

    private final TypesMapper typesMapper;

    public PatientMapperTest(TypesMapper typesMapper) {
        this.typesMapper = new TypesMapperImpl();
    }

    @Test
    void test() {
        assertNull(this.typesMapper);
    }
}

Sin embargo, se comporta exactamente igual que antes.

No obstante, cuando ejecuto mvn test, parece ser ignorado:

$ mvn test
[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Errors: 
[ERROR]   PatientMapperTest.test » ParameterResolution No ParameterResolver registered f...
[INFO] 
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

Dependencia del pom relacionada:

<parent>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-parent</artifactid>
    <version>2.5.5</version>
    <relativepath></relativepath> <!-- lookup parent from repository -->
</parent>

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-test</artifactid>
    <scope>test</scope>
</dependency>

¿Alguna idea?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que JUnit 5 no puede encontrar un ParameterResolver para la inyección de dependencia TypesMapper en PatientMapperTest.

    Para resolver esto, puedes configurar JUnit 5 para que use la Extensión de Spring y así proporcionar soporte para inyectar beans de Spring en tus clases de prueba.

    Agrega la siguiente anotación a tu clase de prueba:

    @ExtendWith(SpringExtension.class)
    

    Luego, anota el campo typesMapper con @Autowired:

    @Autowired
    private TypesMapper typesMapper;
    

    Esto le indica a Spring que inyecte el bean TypesMapper en la clase de prueba. Ten en cuenta que ya no necesitas la anotación @SpringBootTest.

    Tu clase de prueba actualizada debería lucir así:

    @ExtendWith(SpringExtension.class)
    public class PatientMapperTest {
    
        @Autowired
        private TypesMapper typesMapper;
    
        @Test
        void test() {
            assertNull(typesMapper);
        }
    }
    

    Con este cambio, se usará la Extensión de Spring de JUnit 5 para resolver la dependencia TypesMapper y tu prueba debería ejecutarse correctamente.

Comments are closed.