Java 在测试之间重新设置H2数据库(即将数据库重置为我的SQL文件)

Java 在测试之间重新设置H2数据库(即将数据库重置为我的SQL文件),java,sql,h2,elastic-mq,Java,Sql,H2,Elastic Mq,我正在尝试使用H2进行集成测试。我希望H2数据库在每次测试之间重置为mydata.sql。但在建议的解决方案中,我没有发现有效的方法@Transactional和@DirtiesContext似乎不起作用 在@beforeAll中,我正在设置一个模拟队列(使用ElasticMQ库,想知道这是否也会导致问题?) 当我自己运行测试时,测试工作正常 任何想法都将不胜感激 出于某种原因@DirtiesContext(classMode=DirtiesContext.classMode.BEFORE\u

我正在尝试使用H2进行集成测试。我希望H2数据库在每次测试之间重置为mydata.sql。但在建议的解决方案中,我没有发现有效的方法<代码>@Transactional和
@DirtiesContext
似乎不起作用

@beforeAll
中,我正在设置一个模拟队列(使用
ElasticMQ
库,想知道这是否也会导致问题?)

当我自己运行测试时,测试工作正常


任何想法都将不胜感激

出于某种原因
@DirtiesContext(classMode=DirtiesContext.classMode.BEFORE\u EACH\u TEST\u METHOD)
解决了我的问题!我之前没有尝试过这个方法,因为
@DirtiesContext(classMode=DirtiesContext.classMode.AFTER\u EACH\u TEST\u方法)
对我不起作用

我不知道你是否会喜欢我的建议;但是,由于这是一个集成测试,也许您不应该在每个测试之间重置数据库,而应该编写断言,以便它们考虑到数据库处于“已使用”状态的事实声明可能查询特定行,而不是全部选择,并假设它应该只有n行数?我在测试中更新数据库中的行(例如更改某个实体的状态),然后希望在另一个测试中以不同的方式测试更改该行。由于测试可以以任何顺序运行,因此每次都不重置DB似乎是一个糟糕的决定。如果另一个测试没有改变状态,那么您可能有机会在测试中更加具体;此测试测试状态是否更新其他测试测试行的其他方面?我认为,如果每次都有一个干净的数据库,您往往会错过只有在数据库中有数据时才会出现的问题,当然,这些问题可能永远不会出现:)最好为每次测试清理数据库,并使其处于已知状态。