测试 Jersey 应用程序,使用 Jersey 注入内置框架注入 类 (HK2)

Testing Jersey app, Injecting classes using Jersey Injection built-in framework (HK2)

我需要为某些 class 创建测试。主项目 (src/main/java/..) 中的这个 class 很容易注入另一个 classes,因为我有自定义 ResourceConfig class 声明必须扫描哪些包以寻求服务classes.

现在我创建了测试目录(在 src/test/java/.. 中)并创建了一个 class,类似于:

public class TheMentionedClassIntegrationTest {
    @Inject
    private TheMentionedClass theMentionedClass ;

    @Test
    public void testProcessMethod() {
        assertNotNull(theMentionedClass);
    }
}

但问题是,无论我做什么,class 始终为空。在项目的另一个测试中,我使用了 JerseyTest class。所以我尝试在这里做同样的事情,用 JerseyTest 扩展 TheMentionedClassIntegrationTest,覆盖 configure 方法,创建我的私有 ResourceConfig class 注册 Binder (整个项目的默认设置)并注册 TheMentionedClassIntegrationTest

没用。我做了很多不同的尝试,但 none 成功了。我认为使用 HK2 非常困难,没有好的文档等等..

你们知道如何将 TheMentionedClass 注入测试 class 吗?也许我的方法是错误的?

谢谢!

最简单的方法就是创建 ServiceLocator 并使用它来注入测试 class,如 所示。例如

public class TheMentionedClassIntegrationTest {

    @Inject
    private TheMentionedClass theMentionedClass;

    @Before
    public void setUp() {
        ServiceLocator locator = ServiceLocatorUtilities.bind(new YourBinder());
        locator.inject(this);
    }

    @Test
    public void testProcessMethod() {
        assertNotNull(theMentionedClass);
    }
}

您也可以使用(制作)JUnit 运行器,如 所示。

对于其他一些想法,您可能需要查看 hk2-testing 的测试,以及它的所有包含项目的一些用例示例。