一个测试用例的测试数据反映在另一个测试用例中

时间:2019-02-21 13:13:46

标签: java spring gradle junit hsqldb

我试图在单元测试中使用@sql和@sqlgroup。我有2个测试用例,分别是testA和testB。 testA的sqlgroup是

    @SqlGroup({
        @Sql(value = "classpath:test/scripts/testA-service/before-test.sql",
                executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),
        @Sql(value = "classpath:test/scripts/testA-service/before-testA.sql",
                executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),
        @Sql(value = "classpath:test/scripts/testA-service/after-test.sql",
                executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
})

testB的sqlgroup是

  @SqlGroup({
        @Sql(value = "classpath:test/scripts/testB-service/before-test.sql",
                executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),
        @Sql(value = "classpath:test/scripts/testB-service/before-testB.sql",
                executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),
        @Sql(value = "classpath:test/scripts/testB-service/after-testB.sql",
                executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD),
        @Sql(value = "classpath:test/scripts/testB-service/after-testB.sql",
                executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
})

在before-testA.sql中,我在名为TABLE1的表中插入一些随机值。在testA-service的after-test.sql中,我截断了TABLE1。

在testB服务的before-test.sql中,如果存在TABLE1,则将其删除,然后再次创建它。我再次在表1中插入一些随机值。在testB-service的after-test.sql中,我截断了TABLE1。

在运行测试用例testB时,正在使用的TABLE1中的值不是第二次插入的。而是使用第一次插入的值。

我正在使用HSQLdb。此问题不是在本地出现,而是在prod / dev服务器中出现。

1 个答案:

答案 0 :(得分:0)

如果这是一个进程内文件:数据库,并且两个测试是两个单独的进程,请确保在第一个测试的AFTER_TEST结束时执行“ SHUTDOWN”。

使用HSQLDB服务器 hsql:连接,或者当两个测试在同一Java进程中并且您的数据库是 mem:时,“ SHUTDOWN”不应为被执行。在第二种情况下,它将失去第一种测试所完成的一切。