Java 泽西测试&x2B;香港2+;注射厂服务

Java 泽西测试&x2B;香港2+;注射厂服务,java,jersey-2.0,hk2,jersey-test-framework,Java,Jersey 2.0,Hk2,Jersey Test Framework,我试图将HK2 Factory service提供的对象注入Jersey测试类中,但得到了不满意的依赖项异常 我的工厂服务如下 public class TestFactory implements Factory<TestObject>{ private final CloseableService closeService; @Inject public TestFactory(CloseableService clos

我试图将HK2 Factory service提供的对象注入Jersey测试类中,但得到了不满意的依赖项异常

我的工厂服务如下

    public class TestFactory implements Factory<TestObject>{

        private final CloseableService closeService;

        @Inject
        public TestFactory(CloseableService closeService) {
            this.closeService = closeService;
        }

        @Override
        public TestObject provide() {
            TestObject casualObject = new TestObject();
            this.closeService.add(() -> dispose(casualObject));
            return casualObject;
        }

        @Override
        public void dispose(TestObject instance) {
            instance.destroy();
        }
    }
并在例外情况下取得进展

多重异常有3个异常。它们是:

  • org.glassfish.hk2.api.unsatifiedPendencyException:SystemInjecteeImpl上没有可用于注入的对象(requiredType=CloseableService,parent=TestFactory,限定符={},position=0,optional=false,self=false,unqualified=null,2053349061)
  • java.lang.IllegalArgumentException:尝试解析com.test.factories.TestFactory的依赖项时发现错误
  • java.lang.IllegalStateException:无法执行操作:在com.test.factories.TestFactory上解析

  • CloseableService
    是应用程序中可用的服务。您创建的
    ServiceLocator
    未绑定到Jersey应用程序。它只是一个独立的定位器。因此,尝试使用此定位器注册
    TestFactory
    将导致它失败,因为没有
    CloseableService
    。您在
    ResourceConfig
    中注册的配置将正常工作

    不确定您到底想做什么,但是如果您想在测试中访问服务,您可以做的一件事就是将服务绑定为一个实例,比如

    class MyTest {
        private Service service;
    
        @Override
        public ResourceConfig configure() {
            service = new Service();
            return new ResourceConfig()
                .register(new AbstractBinder() {
                    @Override
                    public void configure() {
                        bind(service).to(Service.class);
                    }
                })
        }
    }
    

    CloseableService
    是应用程序中可用的服务。您创建的
    ServiceLocator
    未绑定到Jersey应用程序。它只是一个独立的定位器。因此,尝试使用此定位器注册
    TestFactory
    将导致它失败,因为没有
    CloseableService
    。您在
    ResourceConfig
    中注册的配置将正常工作

    不确定您到底想做什么,但是如果您想在测试中访问服务,您可以做的一件事就是将服务绑定为一个实例,比如

    class MyTest {
        private Service service;
    
        @Override
        public ResourceConfig configure() {
            service = new Service();
            return new ResourceConfig()
                .register(new AbstractBinder() {
                    @Override
                    public void configure() {
                        bind(service).to(Service.class);
                    }
                })
        }
    }
    

    正如您所说,
    CloseableService
    (间接地)在测试类中使用时产生了问题。它按照你描述的方式工作。我只是想使用非测试类中使用的
    工厂
    服务。不知道你的意思。如果您想在非jersey测试中使用TestFactory,那么模拟CloseableService并绑定模拟。我的意思是我们在jersey资源类(
    @Path
    )中注入
    的方式,正如您所说,
    CloseableService
    (间接)在测试类中使用时造成了问题。它按照你描述的方式工作。我只是想使用非测试类中使用的
    工厂
    服务。不知道你的意思。如果您想在非jersey测试中使用TestFactory,那么模拟CloseableService并绑定模拟。我指的是我们在jersey资源类中注入的方式(
    @Path