当前位置: 首页 > 知识库问答 >
问题:

Spring JUnit测试未加载完整的应用程序上下文

许出野
2023-03-14

嗨,我正试图让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 TestCase的applicationcontext中。但从大豆的产量来看,它似乎没有做到这一点。

共有1个答案

鲁靖
2023-03-14

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

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

此外,application应该使用@configuration注释,正如其他人提到的那样。

 类似资料:
  • 我在我的src/test/resources路径中创建了一个application-integrationtest.yaml,所以我的测试是针对创建的docker TestContainer运行的。问题是没有加载我的application-integrationtest.yaml。 我正在运行一个SpringBoot2.x应用程序 原因:org.springframework.beans.Bean

  • 问题内容: 我有一个包含2个测试的测试类: 当我单独运行测试时,我不会出错,但是当我同时运行所有测试时,会失败。失败是由于某些测试修改了应用程序上下文导致的: 是否可以单独运行此测试?我只想在启动test1时读取所有必需的东西,然后运行测试,然后关闭所有必需的东西。然后启动test2。 问题答案: 您可以在修改应用程序上下文的测试类上使用@DirtiesContext批注。 Java文档 Spri

  • 我得到的错误是: 我试图更改上下文配置的位置,如下所示:

  • 我正在将webapp中使用的spring框架版本从3.1.4升级到4.1.8。在新的Spring版本中,我们的一些单元测试失败了,因为@AutoWired不再工作。这是失败的测试之一: } 这是math-application-context文件: 我还尝试使用应用程序上下文加载bean,但失败了,出现了以下异常: 如果删除autowired字段,测试将失败,并且通过超类中的应用程序上下文加载的另

  • 假设我想为类编写一个,它可以是,因此我需要加载。 我的测试有注释和main方法 当然,我有这样一些基准: 现在的问题是如何注入? 可能的解决办法