TestNG @Factory和Spring的@DirtiesContext

时间:2017-03-09 09:05:39

标签: java spring testng

我们在测试代码中非常自由地使用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中)看起来像这样

  • firstTest(带有“param1”)=> SUCCESS
  • firstTest(带有“param2”)=> SUCCESS
  • secondTest(带“param1”)=> SUCCESS
  • secondTest(带有“param2”)=>失败,因为数据库bean及其数据库连接已经关闭

当我删除@DirtiesContext注释时,测试方法都可以正常工作,但在我的实际测试中,我遇到了测试间问题。有没有办法让@DirtiesContext和@Factory很好地一起玩?

0 个答案:

没有答案