Tenemos una aplicación que se basa en la primavera de arranque 2.0. Estamos en el proceso de migración a partir de JDK11 JDK8. Esto también nos permitió actualizar la primavera Arrancar desde 2.0 a 2.1. Después de leer a través de la lista de cambios, al parecer había algún cambio importante que necesitaba para nosotros.
Ahora las mentiras de problemas en donde algunas clases de prueba se anotan tanto con @SpringBootTest
y @DataJpaTest
. De acuerdo con esto , y así como la documentación, no se supone que debemos usar los dos juntos y en su lugar hemos cambiado @DataJpaTest
a @AutoConfigureTestDatabase
. Así es como el código es:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {A.class, B.class}, properties = {
"x=xxx",
"y=yyy"
})
@AutoConfigureTestDatabase // Used to be @DataJpaTest
@EnableJpaRepositories("com.test")
@EntityScan("com.test")
public class Test {
@TestConfiguration
public static class TestConfig {
// Some beans returning
}
// Tests
}
Ahora, nos encontramos con el siguiente error:
NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Así que de acuerdo con esta respuesta , hemos hecho algo como esto:
@EnableJpaRepositories(basePackages="com.test", entityManagerFactoryRef="entityManagerFactory")
Incluso después de esto, aún así terminar con el mismo error. ¿Es este el camino correcto para eliminar @DataJpaTest
? ¿O tenemos necesidad de eliminar @SpringBootTest
y hacer otra cosa? Cualquier tipo de orientación es muy apreciada.
El testclass se anota con @DataJpaTest y @ContextConfiguration
@RunWith(SpringRunner.class)
@DataJpaTest
@ContextConfiguration(locations = { "classpath:test-context.xml" })
public abstract class AbstractTestCase {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractTestCase.class);
}
Definimos una prueba de context.xml. Esto se debe a la TestModule está aislado de todos los demás módulos del proyecto (multi módulo de experto). En la prueba de context.xml definimos el componente de exploración para la base-paquete.
<context:component-scan base-package="de.example.base.package" />