Spring JUnit Test没有加载完整的应用程序上下文

时间:2015-02-25 05:52:55

标签: java spring junit spring-boot spring-test

您好我正在尝试春季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测试用例的applicationcontext中。但是从bean的产量来看,似乎并没有这样做。

3 个答案:

答案 0 :(得分:7)

您需要使用@ActiveProfiles注释您的测试类,如下所示;否则,您的Application配置类将始终禁用。这就是为什么您目前没有在ApplicationContext中列出任何自己的bean。

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

此外,Application应使用其他人提及的@Configuration进行注释。

答案 1 :(得分:0)

您可能错过了@Configuration课程的Application注释吗?

答案 2 :(得分:0)

在无法扩展的每个测试类中添加@ActiveProfile可以更好地将其添加到VM选项中

const listLessons = this.props.lesson.map((item, index) => {
  return (
    <Fragment key={index}>
      ...
    </Fragment>
  );
};