[英]How do I mock a jwt with Mockito
我在 controller 中有这段代码片段可以在 quarkus 中进行测试:
@Context
private SecurityContext securityContext;
....
JsonWebToken jsonWebToken = (JsonWebToken) securityContext.getUserPrincipal();
if(!AuthorizationHelper.checkJwt(jsonWebToken)) {
return Response.status(Response.Status.UNAUTHORIZED).build();
}
AuthorizationHelper是一个带有@Singleton注解的class,checkJwt()方法如下所示:
public static boolean checkJwt(JsonWebToken jsonWebToken) {
return jsonWebToken!=null&&jsonWebToken.getName()!=null;
}
这就是我写的:
@Test
public void testGetUsers() {
Mockito.when(AuthorizationHelper.checkJwt(Mockito.any(JsonWebToken.class))).thenReturn(true);
given()
.when().get("/api/v1/users")
.then()
.statusCode(200);
}
它抱怨说“你不能在验证或存根之外使用参数匹配器。”
我确实尝试模拟 SecurityContext class,并让它返回我创建的 jwt,尽管我初始化了 jwt,当它出现 securityContext.getPrincipal() 时它会返回 null。
AuthorizationHelper.checkJwt
是一个 static 方法调用。 Mocking 这在 mockito 中的工作方式不同。根据mockito 文档:
assertEquals("foo", Foo.method());
try (MockedStatic mocked = mockStatic(Foo.class)) {
mocked.when(Foo::method).thenReturn("bar");
assertEquals("bar", Foo.method());
mocked.verify(Foo::method);
}
assertEquals("foo", Foo.method());
在你的情况下,你需要照顾 arguments 并做这样的事情(尚未测试):
mocked.when(() -> AuthorizationHelper.checkJwt(Mockito.any(JsonWebToken.class))).thenReturn(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.