【问题标题】:Unittesting with an OIDC Auth Server not possible?无法使用 OIDC 身份验证服务器进行单元测试?
【发布时间】:2020-11-01 03:43:07
【问题描述】:

尝试为我的应用程序编写单元测试,但偶然发现了以下问题。

由于定义了 Auth 服务器(在本例中为 Keycloak),我的 Quarkus 应用程序甚至无法在 Auth 服务器运行的情况下启动。这就是为什么我想问我是否可以解耦这种硬依赖?

我尝试对不受任何机制保护的方法进行单元测试,以便该方法完全独立于 Jwt 或 Auth 服务器。

在此先感谢您的问候,

罗萨里奥

Application.properties

#OIDC
quarkus.oidc.client-id=xxx
#quarkus.oidc.credentials.secret=1bef[..]
quarkus.oidc.application-type=service
quarkus.oidc.auth-server-url=http://localhost:8081/auth/realms/randomRealm

测试:

@Test
public void testHelloEndpoint() {
given()
.when().get("/video/hello")
.then()
.statusCode(200)
.body(is("hello"));
}

【问题讨论】:

    标签: unit-testing openid-connect quarkus


    【解决方案1】:

    您可以在测试配置文件中停用 oidc。只需将以下内容添加到您的 application.properties:

    %test.quarkus.oidc.enabled=false
    

    注意:如果您想编写包括与 oidc 的连接的测试,此解决方案将不起作用,因为您无法在应该激活或不激活的地方标记测试。然后你必须启动一个像 keycloak 这样的 oidc 服务器,即使用 testcontainers。我认为 Rest-Assured 有一种方法可以为此添加凭据。

    【讨论】:

    • 谷歌搜索但没有找到任何东西:有没有办法也禁用数据源?
    • 您无法在使用 @QuarkusTest 注释的测试中完全停用数据源,但您可以将数据源更改为 H2,因此 quarkus 会自动为您的测试启动一个 H2 内存数据库。将以下内容添加到您的 application.properties %test.quarkus.datasource.db-kind=h2 %test.quarkus.datasource.jdbc.url=jdbc:h2:mem:test。您还需要将 h2-jdbc-driver 添加到您的依赖项中,例如您的 postgres 驱动程序。看看:quarkus.io/guides/datasource#jdbc-datasource-2
    【解决方案2】:

    在较新版本的 quarkus 中,您可以模拟身份验证服务器 https://quarkus.io/guides/security-openid-connect#integration-testing-wiremock

    在你的pom.xml 添加

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-test-oidc-server</artifactId>
      <scope>test</scope>
    </dependency>
    

    application.properties 中添加:

    # keycloak.url is set by OidcWiremockTestResource
    %test.quarkus.oidc.auth-server-url=${keycloak.url}/realms/quarkus/
    %test.smallrye.jwt.sign.key.location=privateKey.jwk
    

    在你的测试类中使用:

    @QuarkusTest
    @QuarkusTestResource(OidcWiremockTestResource.class)
    public class YourTestClass {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多