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

hud*_*udi 33 java junit spring

我有一个包含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 {}        
}
Run Code Online (Sandbox Code Playgroud)

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

  b = beanFactory.getBean("logDataSource", BasicDataSource.class);
  b.set ...
Run Code Online (Sandbox Code Playgroud)

是否可以单独运行此测试?我只是想在test1启动它时读取所有必要的东西然后运行测试然后关闭所有必要的东西.然后开始test2.

gro*_*odt 58

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

Java Doc

Spring文档

默认情况下,这将在运行整个测试类后将应用程序上下文标记为脏.如果您希望在单个测试方法之后将上下文标记为脏,则可以替代注释测试方法,或者在类级别注释中将classMode属性设置为AFTER_EACH_TEST_METHOD.

@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
Run Code Online (Sandbox Code Playgroud)

  • 很高兴它成功了。您可能想在给您带来麻烦的测试方法上尝试使用 @Rollback 注释。将测试分为 2 类可能是一个更好的主意,这样就不会导致其他测试失败。 (3认同)