gpt4 book ai didi

java - Jersey 客户端 API 与 Jersey 测试框架

转载 作者:搜寻专家 更新时间:2023-11-01 01:10:06 24 4
gpt4 key购买 nike

我是 Web 服务的新手,想知道 Jersey 客户端 API 和 Jersey 测试框架之间的区别是什么?

我想测试我的 jersey REST 网络服务端点。哪个才是正确的使用方式?

最佳答案

有许多 HTTP 客户端 API(例如 Apache HttpClient)。您需要一个来进行客户端测试。我们需要以某种方式通过 HTTP 访问我们的服务,因此单元测试需要这些 API 之一。由于您已经在使用 Jersey,Jersey Client API 是一个不错的选择。一个例子可能看起来像

final String url = "http://stackoverflow.com/questions/27160440/" +
"jersey-client-api-vs-jersey-test-framework";
Client client = ClientBuilder.newClient();
WebTarget target = client.target(url);
Response response = target.request().accept(MediaType..get();
String html = response.readEntity(String.class);
System.out.println(html);
response.close();

如您所见,客户端 API 不必调用我们的服务。它只是 HTTP 调用的接口(interface),具有“Rest”功能。如果我们想运行我们自己的服务,我们首先需要将它们部署到一个容器中,无论是一个完整的服务器/容器,还是一些嵌入式变体。没有框架,完整的测试可能看起来像

<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>

public class SimpleTest {

static final String BASE_URI = "http://localhost:8080/myapp/";
static HttpServer server;
static Client client;

private static HttpServer startServer() {
final ResourceConfig resourceConfig = new ResourceConfig()
.packages("where.my.resources.are")
.register(HelloResource.class);
// normally the resource class would not be in the unit test class
// and would be in the `where.my.resources.are` package pr sub package
return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), resourceConfig);
}

@Path("hello")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}

@BeforeClass
public static void setUpClass() {
server = startServer();
client = ClientBuilder.newClient();
}

@AfterClass
public static void tearDownClass() {
server.shutdown();
}

@Test
public void test() {
WebTarget target = client.target(BASE_URI);
Response response = target.path("hello").request().get();
String hello = response.readEntity(String.class);
assertEquals("Hello World!", hello);
response.close();
}
}

Jersey 测试框架 让我们能够更轻松地进行半集成/集成测试,并提供更复杂的容器部署选项。这些服务可以启动到轻量级嵌入式容器(也是不同类型)中,该容器将在运行单元测试时自动启动和停止。该框架实际上依赖于 Jersey Client API,因此如果您正在使用该框架,那么您可以在您的测试用例中使用 Client API。一个例子

<dependencies>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>2.13</version>
</dependency>
</dependencies>

public class SimpleTest extends JerseyTest {

@Path("hello")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}

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

@Test
public void test() {
Response response = target("hello").request().get();
String hello = response.readEntity(String.class);
assertEquals("Hello World!", hello);
response.close();
}
}

您可以看到相似之处,@Test。那是因为,我们正在使用客户端 API。我们不需要显式配置 Client,因为框架会为我们做这件事。

所以选择实际上取决于您是否要使用测试框架。无论哪种方式,您都应该知道如何使用 Jersey Client API,因为您将以任何一种方式使用它(除非您决定只使用另一个 HTTP 客户端 API,如 HttpClient)


阅读更多

关于java - Jersey 客户端 API 与 Jersey 测试框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27160440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com