用junit测试spring应用程序在testclass之后保留数据

fnx2tebb  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(280)

我正在开发一个更大的spring启动应用程序,它有很多测试(更像是集成测试)。我现在的工作是加快考试的进程。我发现,如果我运行多个测试类,那么testdata,我们需要在一个testrun中多次设置测试应用程序。我们使用这样的方法来设置类中的数据(编辑:存储库和 testDataBuilder@Autowired ):

@BeforeEach
public void setup() {
    if (Repository.findByShortId("someId") == null) {
        testDataBuilder.createTestData();
    }
}

在testclass中,这可以正常工作。但是如果我的测试运行到下一个类,它似乎会删除数据(数据通常存储在数据库中,我认为在测试中数据存储在内存数据库中,对此不确定)。
我尝试了多种方法来实现这一点,但最终没有成功:
在每个测试扩展的抽象类中构建数据
在某些测试中使用@commit
使用testsuite并尝试在所有测试之前创建数据,如下所示:

@RunWith(Suite.class)
@SuiteClasses({testClass1.class ...})
@SpringBootTest
@ActiveProfiles({ "unit-test" })
public class testSuite {
@ClassRule
    public static setupTestData setup = new setupTestData();
}

这不起作用,因为当时Spring没有运行,所以 @ClassRule 正在运行。
设置testdata的最佳方法是什么,这样不是每个testclass都必须设置它们?

5gfr0r5j

5gfr0r5j1#

为什么test@configuration不将h2 inmemory数据库作为依赖项来Map正确的数据库bean?
spring/springboot自动缓存上下文,而不需要做任何特殊的操作。
如果@repository使用h2内存,那么它将在所有测试用例中缓存。
h2也可以配置为写入一个文件(而不是内存),如果您想要它而不是内存的话。

By default, closing the last connection to a database closes the database. For an in-memory database, this means the content is lost.

要保持数据库打开,请添加;db\u close\u delay=-1到数据库url。要在虚拟机处于活动状态时保留内存中数据库的内容,请使用jdbc:h2:mem:test;db\u close\u delay=-1。
jdbc:h2:~/试验;db\u close\u delay=-1;<--写入文件,并在vm处于活动状态时禁用关闭
http://www.h2database.com/html/features.html#database_only_if_exists

相关问题