在 quarkus 中测试时验证模拟用户

Ric*_*coZ 2 quarkus

我正在尝试测试由@RolesAllowed 保护的 quarkus 休息端点

...

@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@RolesAllowed({ "APPLICATION_USER"})
public Response getFile(@PathParam(value = "id") String documentId, @Context UriInfo uriInfo)
...

Run Code Online (Sandbox Code Playgroud)

测试用例

@QuarkusTest
class DocumentResourceTest {

    @Test
    public void testDocumentEndpoint() {
        String documentId = "someId";

        given()
                .when().get("/documents/" + documentId)
                .then()
                .statusCode(200);
    }


}

Run Code Online (Sandbox Code Playgroud)

如何为我的测试用例模拟角色为“APPLICATION_USER”的经过身份验证的用户?

Mic*_*rry 6

您可以注入一个SecurityIdentity,然后您可以使用 Mockito 用相关角色存根:

@QuarkusTest
public class DocumentResourceTest {

    @InjectMock
    SecurityIdentity identity;

    @BeforeEach
    public void setup() {
        Mockito.when(identity.hasRole("APPLICATION_USER")).thenReturn(true);
    }

    @Test
    public void testDocumentEndpoint() {
        String documentId = "someId";

        given()
                .when().get("/documents/" + documentId)
                .then()
                .statusCode(200);
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您想测试各种不同的角色,您当然可以将存根调用移动到您的单个测试中。

请注意,您需要添加quarkus-junit5-mockito依赖项才能使其工作:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-junit5-mockito</artifactId>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)