Soy nuevo en frameworks (acabo de pasar la clase) y esta es la primera vez que uso Spring Boot.
Estoy tratando de ejecutar una prueba simple de Junit para ver si mis CrudRepositories realmente funcionan.
El error que sigo recibiendo es:
Incapaz de encontrar una @SpringBootConfiguration, debe usar @ContextConfiguration o @SpringBootTest (classes = ...) con su prueba java.lang.IllegalStateException
¿Spring Boot no se configura a sí mismo?
Mi clase de prueba:
@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {
@Autowired
private AccountRepository repository;
@After
public void clearDb(){
repository.deleteAll();
}
@Test
public void createAccount(){
long id = 12;
Account u = new Account(id,"Tim Viz");
repository.save(u);
assertEquals(repository.findOne(id),u);
}
@Test
public void findAccountByUsername(){
long id = 12;
String username = "Tim Viz";
Account u = new Account(id,username);
repository.save(u);
assertEquals(repository.findByUsername(username),u);
}
Mi iniciador de aplicaciones Spring Boot:
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value {@PropertySource("classpath:application.properties")})
@EntityScan(basePackages={"domain"})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
Mi repositorio:
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
fuente
Application
se encuentra en. Sin embargo, si usted se refieresrc/main
ysrc/test
, a continuación, esas carpetas no son parte del paquete jerarquía. Quizás sea mejor que solo actualice su pregunta con una captura de pantalla o una explicación de cómo es la estructura de su proyecto.La configuración se adjunta a la clase de aplicación, por lo que lo siguiente configurará todo correctamente:
Ejemplo del proyecto JHipster aquí .
fuente
Vale la pena verificar si ha refactorizado el nombre del paquete de su clase principal anotado con
@SpringBootApplication
. En ese caso, el caso de prueba debe estar en un paquete apropiado; de lo contrario, lo buscará en el paquete anterior. Este fue el caso para mí.fuente
Además de lo que dijo Thomas Kåsene, también puede agregar
a la anotación de prueba para especificar dónde debe buscar la otra clase si no desea refactorizar su jerarquía de archivos. Esto es lo que el mensaje de error sugiere al decir:
fuente
En mi caso, los paquetes eran diferentes entre las clases Aplicación y Prueba
y
Después de hacerlos aceptar, las pruebas se ejecutaron correctamente.
fuente
Funciona para mi
el nombre del paquete de la clase de prueba anterior se cambia al mismo que el nombre del paquete de la clase normal.
cambiar a esto
fuente
El segmento de prueba proporcionado en Spring Boot 1.4 trajo capacidades de prueba orientadas a funciones .
Por ejemplo,
@JsonTest proporciona un entorno Jackson simple para probar la serialización y deserialización de json.
@WebMvcTest proporciona un entorno web simulado, puede especificar la clase de controlador para la prueba e inyectar el MockMvc en la prueba.
@DataJpaTest preparará una base de datos integrada y proporcionará un entorno JPA básico para la prueba.
@RestClientTest proporciona un entorno de cliente REST para la prueba, especialmente RestTemplateBuilder, etc.
Estas anotaciones no están compuestas con SpringBootTest, se combinan con una serie de
AutoconfigureXXX
y unas@TypeExcludesFilter
anotaciones.Echa un vistazo a
@DataJpaTest
.Puede agregar su anotación @AutoconfigureXXX para anular la configuración predeterminada.
Echemos un vistazo a su problema,
@DataJpaTest
y@SpringBootTest
, como se dijo anteriormente@DataJpaTest
, construirá la configuración a su manera (por ejemplo, de forma predeterminada, intentará preparar un H2 incrustado) a partir de la herencia de configuración de la aplicación.@DataJpaTest
está designado para el corte de prueba .@DataJpaTest
, lea esta entrada de blog oficial de Spring.io para este tema, (un poco tedioso).Application
más pequeñas por características, tales comoWebConfig
,DataJpaConfig
etc. Una configuración con todas las funciones (web mixta, datos, seguridad, etc.) también hizo que sus pruebas basadas en el segmento de prueba fallaran. Verifique las muestras de prueba en mi muestra .fuente
Creo que la mejor solución para este problema es alinear la estructura de carpetas de pruebas con la estructura de carpetas de la aplicación.
Tuve el mismo problema causado por la duplicación de mi proyecto desde un proyecto de estructura de carpetas diferente.
Si su proyecto de prueba y su proyecto de aplicación tendrán la misma estructura, no será necesario que agregue anotaciones especiales a sus clases de prueba y todo funcionará como está.
fuente
Cuando todas las clases estaban en el mismo paquete, las clases de prueba funcionaban. Tan pronto como moví todas las clases de Java a un paquete diferente para mantener la estructura adecuada del proyecto, recibí el mismo error.
Lo resolví proporcionando mi nombre de clase principal en la clase de prueba como se muestra a continuación.
fuente
Tuve el mismo problema y lo resolví agregando una clase vacía anotada
SpringBootApplication
en el paquete raíz de la carpeta src / test / javafuente
En mi caso,
asegúrese de que su (
test package
nombre )YourApplicationTests
sea equivalente al (main package
nombre ).fuente
Las anotaciones anteriores funcionaron bien para mí. Estoy usando arranque de primavera con JPA.
fuente