【问题标题】:Reload Spring application context after every test每次测试后重新加载 Spring 应用程序上下文
【发布时间】:2012-10-28 14:09:16
【问题描述】:

我有一个包含 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。

【问题讨论】:

    标签: java spring junit


    【解决方案1】:

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

    Java Doc

    Spring documentation

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

    @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
    

    【讨论】:

    • 不错的作品就像一个魅力 thx 很多。只有一个限制。当我使用注释 @Transactional 时,仍然有一些脏东西:)
    • 很高兴它成功了。您可能想在测试方法上尝试 @Rollback 注释,这会给您带来麻烦。将测试分成 2 个类别可能是一个更好的主意,这样就不会导致另一个测试失败。
    猜你喜欢
    • 2014-09-03
    • 2013-02-03
    • 2018-07-11
    • 2018-07-20
    • 2015-04-27
    • 1970-01-01
    • 2014-08-18
    • 2014-09-11
    相关资源
    最近更新 更多