如何在每个测试方法之后重置/删除 Quarkus 中的 H2 数据库以使它们独立?

Mar*_*ies 5 junit h2 junit5 jakarta-ee quarkus

I\xc2\xb4m 在我的 Quarkus 项目中使用带有 @QuarkusTestResource 注释的 H2 数据库。每个测试方法都在进行测试并检查是否存在一定数量的用户等。

\n

I\xc2\xb4m 面临的问题是,每次测试运行后数据库不会\xc2\xb4t 被重置,这就是测试失败的原因,因为他们正在获取先前测试运行的结果。

\n
@QuarkusTestResource(value = H2DatabaseTestResource.class)\nclass UserServiceTest {\n\n\n    @Inject\n    UserService userService;\n\n    @Inject\n    UserRepository userRepository;\n\n    private User userA;\n    private User userB;\n\n    @Transactional\n    @BeforeEach\n    void setUp() {\n        userA = new User();\n        userA.setEmail("a");\n        userA.setName("a");\n\n        userB = new User();\n        userB.setName("b");\n        userB.setEmail("b");\n\n        userRepository.persist(userA);\n        userRepository.persist(userB);\n    }\n\n    @Test\n    void testA(){\n       //count == 2\n    }\n\n\n    @Test\n    void testA(){\n       //count == 4\n    }\n\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如何在每次测试后重置H2数据库以使它们彼此独立?

\n

Mar*_*los 3

我在每次测试中都使用@TestTransaction而不是。@Transaction

@QuarkusTest
public class TestInvoiceRepositoryfindAllInvoicesToBePaid {

  @Inject
  MyRepository myRepository;

  @Test
  @TestTransaction
  public void do_something_in_database_01() {
    // it generates and persist data I need for my test
    generateTestData();
    // test my repo method to make sure it does what I want
    MyObject myObject = myRepository.findSomething();
    assertNotNull(myObject);
  }

  @Test
  @TestTransaction
  public void do_something_in_database_02() {
    // here I need to insert the data again, because
    // the previous test rolled everything back at the end of it
    generateTestData();
    // test my repo method to make sure it does what I want
    myRepository.findSomething2();
  }

  private void generateTestData() {
    ...
    ...
    ...
    myRepository.persist(something);
  }
}
Run Code Online (Sandbox Code Playgroud)