web-dev-qa-db-fra.com

Spring Boot 2.1.1: Java.lang.IllegalStateException: impossible de récupérer l'erreur des packages de base @EnableAutoConfiguration lors de l'exécution du test unitaire

L'erreur suivante sera levée lorsque j'exécuterai mon test unitaire. Veuillez indiquer avec bonté si j'ai raté quelque chose. J'utilise Spring Boot 2.1.1.RELEASE. Merci!

Java.lang.IllegalStateException: impossible de récupérer les packages de base @EnableAutoConfiguration


application-test.yml

spring:
  profiles: test
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    username : xxx
    password : xxx
  jpa:
    hibernate:
      ddl-auto: update
  cache:
    type: simple

AppRepository.Java

@Repository
public interface AppRepository extends CrudRepository<App, Integer> {

    App findFirstByAppId(String appId);

}   

AppRepositoryTest.Java

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {AppRepository.class})
@EnableConfigurationProperties
@DataJpaTest
@ActiveProfiles("test")
public class AppRepositoryTest {

    @Autowired
    AppRepository appRepository;

    @Before
    public void setUp() throws Exception {
        App app = new App();
        app.setAppId("testId");
        appRepository.save(app);
    }

    @Test
    public void testFindFirstByAppId() {
        assertNotNull(appRepository.findFirstByAppId("testId"));        
    }
}

Structure du paquet

└───src
    ├───main
    │   ├───Java
    │   │   └───com
    │   │       └───abc
    │   │           └───app
    │   │               ├───config
    │   │               ├───data
    │   │               │   ├───model
    │   │               │   └───repository
    │   │               ├───exception
    │   │               ├───service
    │   │               └───serviceImpl
    │   └───resources
    │       ├───META-INF
    │       └───static
    │           ├───css
    │           ├───images
    │           └───js
    └───test
        └───Java
            └───com
                └───abc
                    └───app
                        ├───data
                        │   └───repository
                        ├───service
                        └───serviceImpl
5
Zaccus

Selon 45.3 Test des applications Spring Boot docs la façon recommandée d'activer les fonctionnalités Spring Boot (comme @EnableAutoConfiguration) consiste à utiliser @SpringBootTest au lieu de l'ancien @ContextConfiguration:

Spring Boot fournit un @SpringBootTest annotation, qui peut être utilisée comme alternative au test de ressort standard @ContextConfiguration annotation lorsque vous avez besoin des fonctionnalités de Spring Boot. L'annotation fonctionne en créant le ApplicationContext utilisé dans vos tests via SpringApplication. En plus de @SpringBootTest un certain nombre d'autres annotations sont également fournies pour tester des tranches plus spécifiques d'une application.

Vous pouvez essayer d'écrire des tests avec @ContextConfiguration, qui est une configuration partielle de Spring Boot, mais vous rencontrerez des problèmes similaires. Spring Boot est fortement basé sur des conventions, par exemple l'analyse des composants démarre à partir du package qui contient @SpringBootApplication classe annotée. Aller à l'encontre de ces conventions n'est pas recommandé.

0
Karol Dowbecki