首页 > 解决方案 > javax.ws.rs REST 目标测试 - 在哪里获取或设置服务器地址?

问题描述

我在哪里对 javax.ws.rs 中创建的 REST 函数进行单元测试,并使用 target() 作为 URL,如https://stackoverflow.com/a/28726499/715269,我不知道如何设置URL 的服务器部分。

如果我以硬方式设置它,则测试将仅在一个环境中运行,例如在发布服务器上。但通常,我在任何服务器上运行应用程序,API 函数在不同的服务器上工作,这取决于我启动应用程序的位置。

如果我不为目标设置任何服务器:

String targetUrl = "/api/v1/documentTypes";
try (Response response = target(targetUrl).request().post(Entity.json(simpleJson))) {

并查找响应的 URI,我看到那里设置了一些服务器部分(http://localhost:9998/),但我不知道它来自哪里,而且这个模仿的服务器不知道targetUrl字符串中的 API 函数。

我应该如何编写这部分单元测试,以便普遍运行?

我认为可能覆盖 configure() 方法可能会有所帮助,但我不确定。

标签: javarestunit-testingjerseyjersey-test-framework

解决方案


我已经找到!

测试类从 JerseyTest 类扩展而来。

public class DocumentTypesTest extends JerseyTest {

该类具有 configure() 方法,必须被覆盖:

@Override
protected Application configure() {
    return new ResourceConfig(DocumentTypes.class);
}

并且新的覆盖方法应该返回被测试 API 函数所在类的配置。

这可能会引起一些误解:您的 API 函数可以按来自多个类的 'value=' 分组。你(和我一样)可以为该组的所有 API 函数创建相同的测试类。那是行不通的!. 您应该为每个 API 方法的类创建单独的测试类。


推荐阅读