java - 每次测试后重新加载 Spring 应用程序上下文

标签 java spring junit

我有一个包含 2 个测试的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContextTest.xml" })
@Transactional
@TransactionConfiguration(defaultRollback = true)

public class MyITest extends implements BeanFactoryAware {

    private BeanFactory beanFactory;

    @Test
    public void test1() throws Exception {}

    @Test
    public void test2() throws Exception {}        
}

当我单独运行测试时,我没有收到任何错误,但是当我一起运行所有测试时,就会出现故障。此失败是由于某些测试修改了应用程序上下文:

  b = beanFactory.getBean("logDataSource", BasicDataSource.class);
  b.set ...

是否有单独运行此测试的选项?我只想在 test1 启动时读取所有必要的内容,然后运行测试,然后关闭所有必要的内容。然后启动test2。

最佳答案

您可以在修改应用程序上下文的测试类上使用@DirtiesContext 注解。

Java Doc

Spring documentation

默认情况下,这将在整个测试类运行后将应用程序上下文标记为脏。如果您想在单个测试方法之后将上下文标记为脏,那么您可以对测试方法进行注释,或者在您的类级别注释中将 classMode 属性设置为 AFTER_EACH_TEST_METHOD。

@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)

关于java - 每次测试后重新加载 Spring 应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288029/

相关文章:

java - IntentService 中的广播接收器

Java,默认编码

java - 带有 log4j2 的 Spring Boot AmqpAppender

java - 即使使用关键字 "after",AOP 方面也会在给定方法之前执行?

java - 正则表达式提取所有长度的数字

java - 如何处理 Java 字符串中的 & 符号并将 URL 作为查询参数值发送?

java - 如何使用 Spring Boot 在 application.properties 中注入(inject) Maven 配置文件的属性

java - 在类之前和之后调用特定方法的通用测试类的设计 - 用于集成测试

java - 单元测试中是否使用了 Spring Framework?

java - 使用 JUnit 对自定义 ElasticSearch 客户端进行单元测试