【发布时间】:2015-02-15 19:53:50
【问题描述】:
我想在 Dropwizard 0.8.0-rc2 应用程序中测试我的 Jersey 资源。另一个障碍是我使用 TestNG 而不是 JUnit,所以我必须手动做一些我从 DropwizardClientRule 复制的东西。
现在我有一些由@Auth 保护的资源。在 Dropwizard 0.7.1 中,我将验证器添加到测试应用程序中,如下所示:
DropwizardResourceConfig resourceConfig = DropwizardResourceConfig.forTesting(…);
Authenticator<BasicCredentials, Identity> authenticator =
credentials -> getAuthorizedIdentity();
resourceConfig.getSingletons().add(
new BasicAuthProvider<>(authenticator, "TEST"));
在这里,getAuthorizedIdentity() 将获取一些测试授权。这将被传递给@Auth 带注释的注入参数。当然,现在有了 Jersey 2,情况发生了一些变化。我试过了:
DropwizardResourceConfig resourceConfig = DropwizardResourceConfig.forTesting(…);
Authenticator<BasicCredentials, Identity> authenticator =
credentials -> getAuthorizedIdentity();
resourceConfig.register(AuthFactory.binder(
new BasicAuthFactory<>(authenticator, "TEST", Identity.class)));
效果是我在所有受保护的资源上都得到 401。调试表明我的身份验证函数根本没有被调用!如果我删除注册,那么我就不会再得到401了(所以注册不是没有效果的),但是现在受保护的资源是不安全的,并为@Auth注解的参数获取null。
那么,如何将身份验证器添加到测试上下文中才能正常工作?生产代码几乎可以在同一行上正常工作。
【问题讨论】:
-
您在这个问题上有什么进展吗?我遇到了同样的障碍。
标签: java unit-testing authentication jersey-2.0 dropwizard