Java 测试期间未保存Quarkus泛奇数

Java 测试期间未保存Quarkus泛奇数,java,testing,integration-testing,quarkus,quarkus-panache,Java,Testing,Integration Testing,Quarkus,Quarkus Panache,我正在使用Quarkus进行实验,并使用RestEasy进行Quarkus测试,在每次测试之前设置虚拟数据时遇到了一个问题 我试图在调用端点之前使用活动记录模式插入用户。在调用user.persistAndFlush()之后(或者只是调用.persist()),当请求用户实体的用户计数时,它正确地返回数据库中有一条记录。但是,当通过RestEasy调用端点时,它会向我抛出一个信息,即找不到具有给定标识符的用户,事实上,当注销服务中特定方法调用中的用户数时,根据Quarkus,有0个用户。 在我看

我正在使用Quarkus进行实验,并使用RestEasy进行Quarkus测试,在每次测试之前设置虚拟数据时遇到了一个问题

我试图在调用端点之前使用活动记录模式插入用户。在调用user.persistAndFlush()之后(或者只是调用.persist()),当请求用户实体的用户计数时,它正确地返回数据库中有一条记录。但是,当通过RestEasy调用端点时,它会向我抛出一个信息,即找不到具有给定标识符的用户,事实上,当注销服务中特定方法调用中的用户数时,根据Quarkus,有0个用户。 在我看来,带@Test注释的方法和服务本身似乎在不同的上下文中运行?这有点奇怪,我肯定遗漏了一些明显的东西

下面是我的测试类的外观:

@QuarkusTest
@QuarkusTestResource(PostgreSQLDatabaseResource.class)
public class AuthenticationResourceTest {

  @TestHTTPEndpoint(AuthenticationResource.class)
  @TestHTTPResource
  URL url;

  @BeforeEach
  @Transactional
  public void setUp() {
    User.deleteAll();
  }


  @Test
  public void testWithNonExistingEmail() {
    AuthenticationChallenge invalidAuthRequest = AuthenticationChallenge.builder()
        .email("admin@admin.com")
        .password("something")
        .build();

    given()
        .when()
        .contentType(ContentType.JSON)
        .body(invalidAuthRequest)
        .post(url)
        .then()
        .statusCode(401);
  }

  @Test
  @Transactional
  public void testWithValidAuthenticationChallenge() {
    User user = User.builder()
        .name("admin")
        .role(Roles.ADMIN)
        .status(Status.ACTIVE)
        .password(BCrypt.withDefaults().hashToString(10, "admin".toCharArray()))
        .email("admin@admin.com")
        .build();

    user.persistAndFlush();

    given()
        .when()
        .contentType(ContentType.JSON)
        .body(AuthenticationChallenge.builder().email("admin@admin.com").password("admin").build())
        .post(url)
        .then()
        .statusCode(200)
        .log()
        .all();
  }
}


在测试方法结束之前,您的用户不会保存到数据库中,因为它是事务性的,并且事务在测试方法结束时提交

通过REST调用,可以在事务外部查询数据库,这样就不会有数据

如果要初始化REST调用可见的某些数据,则需要在
@beforeach
方法中创建数据