簡體   English   中英

Spring JUnit 測試未加載完整的應用程序上下文

[英]Spring JUnit Test not loading full Application Context

嗨,我正在嘗試使用 spring junit 測試用例...並且我需要加載我的完整應用程序上下文。 但是,junit 測試不會初始化完整的應用程序上下文。

測試類:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class MongoDbRepositoryTest {

    @Value("${spring.datasource.url}")
    private String databaseUrl;

    @Inject
    private ApplicationContext appContext;

    @Test
    public void testCRUD() {
        System.out.println("spring.datasource.url:" + databaseUrl);
        showBeansIntialised();
        assertEquals(1, 1);
    }

    private void showBeansIntialised() {
        System.out.println("BEEEAAANSSSS");
        for (String beanName : appContext.getBeanDefinitionNames()) {
            System.out.println(beanName);
        }
    }

輸出:

spring.datasource.url:${spring.datasource.url}
BEEEAAANSSSS
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalPersistenceAnnotationProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor

主要應用類注釋:

@ComponentScan(basePackages = "com.test")
@EnableAutoConfiguration(exclude = { MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class })
@EnableMongoRepositories("com.test.repository.mongodb")
@EnableJpaRepositories("com.test.repository.jpa")
@Profile(Constants.SPRING_PROFILE_DEVELOPMENT)
public class Application { ...

因此,它應該掃描 com.test 包中的所有 spring bean,並將它們加載到 Junit 測試用例的應用程序上下文中。 但是從 bean 初始化的輸出來看,它似乎並沒有這樣做。

您需要使用@ActiveProfiles注釋您的測試類,如下所示; 否則,您的Application配置類將始終被禁用 這就是為什么您目前在ApplicationContext中看不到任何您自己的 bean 的原因。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@ActiveProfiles(Constants.SPRING_PROFILE_DEVELOPMENT)
public class MongoDbRepositoryTest { /* ... */ }

此外, Application應該像其他人提到的那樣用@Configuration進行注釋。

您是否可能在Application類中缺少@Configuration注釋?

在每個無法擴展的測試類中添加 @ActiveProfile 在 VM 選項中添加它

-Dspring.profiles.active=test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM