带有 TestSecurity 的参数化 QuarkusTest

问题描述 投票:0回答:1

我想知道是否有办法参数化 QuarkustTests 和 TestSecurity 可以参数化?目前我有这样的东西

@QuarkusTest
class MyTest {

    @Inject
    Testservice testee;

    @Test
    @TestSecurity(user = "a", roles = "a")
    void testWithRole_a_throwsException() {
        assertThrows(ForbiddenException.class, () -> testee.myMethod());
    }

    @Test
    @TestSecurity(user = "b", roles = "b")
    void testWithRole_b_throwsException() {
        assertThrows(ForbiddenException.class, () -> testee.myMethod());
    }

}

如果我能做这样的事情,我会更好:

@QuarkusTest
class MyTest {


    @Inject
    Testservice testee;

    static Stream<TestUser> testUserDataProvider() {
        return Stream.of(
                new TestUser("a", "a"),
                new TestUser("b", "b")
        );
    }

    @ParameterizedTest
    @MethodSource("testUserDataProvider")
    void testWithRole_throwsException(TestUser testUser) {
        TestSecurity annotation = new TestSecurity(testUser.username, testUser.role);
        assertThrows(ForbiddenException.class, () -> testee.myMethod());
    }

    private record TestUser(String username, String role) {}

}

不幸的是,我在任何地方都没有找到类似的东西。

非常感谢和问候

quarkus junit5 parameterized quarkus-testing
1个回答
0
投票

不,这是不可能的,但你可以这样做:

@ParameterizedTest
@CsvSource(emptyValue = " ", textBlock = """
            admin, admin, 200
            wrongUser, wrongPassword, 401
            correctUserWithWrongRole, 12345, 403
            ,,401
          """)
void checkUser(String username, String password, int expectedStatus) {
   given()
        .header(CONTENT_TYPE, APPLICATION_JSON)
        .auth().basic(username, password)
   .when()
       .get("/api/fruits")
   .then()
       .statusCode(expectedStatus);
}

@ParameterizedTest
@CsvSource(textBlock = """
            GET, /api/fruits, 200
            DELETE, /api/fruits, 403
            GET, /api/forbidden-fruits, 403
           //etc.
          """)
@TestSecurity(user = "correctUser", roles = {"notAdmin", "user"})
void checkAuthorization(String method, String path, int expectedStatus) {
    given()
         .header(CONTENT_TYPE, APPLICATION_JSON)
    when()
         .request(method, path)
    then()
         .statusCode(expectedStatus);
}
© www.soinside.com 2019 - 2024. All rights reserved.