当前位置: 首页 > 知识库问答 >
问题:

使用Jersey测试、Grizzly和HK2依赖注入进行功能测试

蓬琦
2023-03-14

我正在尝试使用Jersey测试框架为我的REST API编写功能测试。然而,当我在功能测试中使用依赖注入时,我似乎遇到了一个障碍。我的主应用程序看起来是这样的:

@ApplicationPath("/")
public class Application extends ResourceConfig {

    private static final URI BASE_URI = URI.create("http://localhost:8080/api/");

    public static void main(String[] args) throws Exception {
        System.out.println("Starting application...");

        final ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();

        final ResourceConfig resourceConfig = new ResourceConfig();
        resourceConfig.register(JacksonFeature.class);
        resourceConfig.register(LoggingFeature.class);
        resourceConfig.packages(true, "my.package.name");

        final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, locator);

        Runtime.getRuntime().addShutdownHook(new Thread(server::shutdownNow));

        server.start();

        Thread.currentThread().join();
    }
}
public class FormsResourceTest extends JerseyTest {

    @Override
    protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
        return new GrizzlyWebTestContainerFactory();
    }

    @Test
    public void testMe() {
        Response response = target("/test").request().get();
        assertEquals("Should return status 200", 200, response.getStatus());
    }

}

是否有一种方法可以将HK2服务定位器与Jersey测试框架一起使用,或者我是否需要将我的应用程序视为外部容器并使用外部容器提供程序,如这里所述:外部容器?

此外,由于这些是功能测试,因此在这里不允许对注入的服务进行嘲弄。

共有1个答案

姬天宇
2023-03-14

您可以使用定位器桥接两个单独的定位器(您创建的一个和来自泽西的一个)并将它们桥接在一起。桥也可以是双向的(在一定的范围内),所以在大多数正常使用中,它会看起来是一个大的serviceLocator。

注意,ServiceLocator桥在本周修复了一个bug,该bug尚未推出到maven,但(可能)将在下周某个时候推出。见HK2-295

 类似资料:
  • 将EntityManager注入资源可以工作,但不能注入Callable。在这里,EntityManager保持。 请告知代码保存在这里是否比保存在GitHub上更好。

  • 例如,Foos的资源可能如下所示: 对于酒吧:

  • 从零开始,没有任何以前的Jersey 1.x知识,我很难理解如何在我的Jersey 2.0项目中设置依赖注入。 我也知道HK2在Jersey 2.0中可用,但我似乎找不到有助于Jersey 2.0集成的文档。 我可以让容器启动并提供我的资源,但是当我将@inject添加到MyService时,框架就会抛出一个异常: 我的starter项目可在github:https://github.com/do

  • 试图创建一个自定义的,我可以通过Jersey注入到我的资源中。 这在本问题的Java中有涉及。我已经阅读了有关这方面的文档,这些文档也是用Java编写的。最后,GitHub中的一些代码涵盖了相同的主题(通过Dropwizard完成)。 这将全部编译,但在运行时失败,出现以下异常 我不知道是我在向Scala的转换中犯了错误,还是我在注册绑定器时做了错误的事情。

  • 我尝试在我的活动中注入修改,但我得到了空异常 这是AndroidApplication类

  • quote.component.ts 此组件依赖于来获取随机报价,然后它将显示。 类很简单 - 它只有getQuote函数,它将修改DOM,因此它将是我们测试的主要目标。 为了测试这个组件,我们需要启动QuoteComponent类。 Angular测试库提供了一个名为TestBed的实用程序。 这允许我们配置一个测试模块,我们可以提供模拟依赖。 此外,它将为我们创建组件并返回一个组件fixtur