我们在测试代码中非常自由地使用Spring的@DirtiesContext注释,以确保测试类之间没有副作用。我最近了解了TestNG的@DataProvider和@Factory,我的代码库中的一些测试确实会受益于这种方法。 但是,我发现@DirtiesContext导致Spring bean过早关闭,即在工厂创建的第一个测试实例的最后一个测试方法之后。
我当前设置的细分版本如下
@ContextConfiguration(classes = { SomeSpringContex.class })
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
class TestClass {
@Autowired
Database database;
private final String configParameter;
@Factory(dataProvider = "testSetup")
public TestClass(String configParameter) {
this.configParameter = configParameter;
}
@DataProvider(name="testSetup")
public static Object[][] createParameters() {
return new Object[][] {
{ "param1" },
{ "param2" }
};
}
@BeforeMethod
public void useConfigParameter() {
// use configParameter to set up test
}
@Test
public void firstTest() {
database.query("SELECT * FROM foo");
}
@Test
public void secondTest() {
database.query("SELECT * FROM bar");
}
}
这实际上创建了两个TestClass实例,一个设置为“param1”,一个设置为“param2”。因此,每个测试按预期运行两次,输出(在eclipse中)看起来像这样
当我删除@DirtiesContext注释时,测试方法都可以正常工作,但在我的实际测试中,我遇到了测试间问题。有没有办法让@DirtiesContext和@Factory很好地一起玩?