1.7. 使用 PostgreSQL 的 Dev Services 以 dev 模式测试您的应用程序
在以生产环境模式运行应用程序前,在 JVM 和原生模式中使用 Dev Services 完成应用程序的集成测试。
首先,将以下依赖项添加到 test 项目中:
使用 Maven:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency>使用 Gradle:
testImplementation("io.rest-assured:rest-assured")
以 dev 模式运行应用程序:
使用 Quarkus CLI:
quarkus dev使用 Maven:
./mvnw quarkus:dev使用 Gradle:
./gradlew --console=plain quarkusDev
在这种情况下,PostgreSQL 的 Dev Services 启动并配置 PostgreSQL 测试容器。确保在您的计算机上安装了 Podman 或 Docker。
要编写集成测试,请使用以下代码示例:
src/test/java/org/acme/security/jpa/JpaSecurityRealmTest.java
package org.acme.security.jpa;
import static io.restassured.RestAssured.get;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.Is.is;
import org.apache.http.HttpStatus;
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class JpaSecurityRealmTest {
@Test
void shouldAccessPublicWhenAnonymous() {
get("/api/public")
.then()
.statusCode(HttpStatus.SC_OK);
}
@Test
void shouldNotAccessAdminWhenAnonymous() {
get("/api/admin")
.then()
.statusCode(HttpStatus.SC_UNAUTHORIZED);
}
@Test
void shouldAccessAdminWhenAdminAuthenticated() {
given()
.auth().preemptive().basic("admin", "admin")
.when()
.get("/api/admin")
.then()
.statusCode(HttpStatus.SC_OK);
}
@Test
void shouldNotAccessUserWhenAdminAuthenticated() {
given()
.auth().preemptive().basic("admin", "admin")
.when()
.get("/api/users/me")
.then()
.statusCode(HttpStatus.SC_FORBIDDEN);
}
@Test
void shouldAccessUserAndGetIdentityWhenUserAuthenticated() {
given()
.auth().preemptive().basic("user", "user")
.when()
.get("/api/users/me")
.then()
.statusCode(HttpStatus.SC_OK)
.body(is("user"));
}
}
如此代码示例中所示,您不需要从测试代码启动测试容器。
要运行这些测试,请选择 Press [r] 来恢复测试 选项,该选项会在您以 dev 模式启动应用后在控制台中显示。
当您以 dev 模式启动应用程序时,PostgreSQL 的 Dev Services 会启动 PostgreSQL dev 模式容器,以便您开始开发应用程序。在开发应用程序时,您可以使用 持续 测试功能单独添加和运行测试。用于 PostgreSQL 的 Dev Services 支持在开发过程中通过提供与 dev 模式容器不冲突的独立 PostgreSQL 测试容器进行测试。
另外,您可以使用 Maven 运行这些测试:
./mvnw test