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
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é.