我正在尝试使用 RestEasy 进行 Quarkus 和 Quarkus 测试,并且在每次测试之前设置虚拟数据时遇到了问题。
我正在尝试在调用端点之前使用 Active Record 模式插入用户。在向用户实体询问用户数量时调用 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();
}
}