gpt4 book ai didi

java - 如何测试 Jersey REST Web 服务?

转载 作者:太空狗 更新时间:2023-10-29 22:40:00 25 4
gpt4 key购买 nike

我编写了一个 Restful Web 服务,必须使用 JUnit4 对其进行测试。我已经使用 Jersey Client 编写了一个客户端。但是想知道我是否只能用 junit4 测试我的服务。有人可以至少帮我做 sample 吗?

我的休息服务有一个认证方法,它接受用户名、密码并返回一个 token 。

我已经为身份验证方法编写了测试用例。但我不确定如何使用 url 进行测试。

public class TestAuthenticate {
Service service = new Service();
String username = "user";
String password = "password";
String token;

@Test(expected = Exception.class)
public final void testAuthenticateInputs() {
password = "pass";
service.authenticate(username, password);
}

@Test(expected = Exception.class)
public final void testAuthenticateException(){
username = null;
String token = service.authenticate(username, password);
assertNotNull(token);
}

@Test
public final void testAuthenticateResult() {
String token = service.authenticate(username, password);
assertNotNull(token);
}
}

最佳答案

如果您想使用 URL 进行测试,那么您需要从您的测试中启动一个服务器。您可以显式启动嵌入式服务器,这在测试中很常见。有点像

public class MyResourceTest {

public static final String BASE_URI = "http://localhost:8080/api/";
private HttpServer server;

@Before
public void setUp() throws Exception {
final ResourceConfig rc = new ResourceConfig(Service.class);
server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
}

@After
public void tearDown() throws Exception {
server.stop();
}

@Test
public void testService() {
Client client = ClientBuilder.newClient();
WebTarget target = client.target(BASE_URI).path("service");
...
}
}

这基本上是一个集成测试。您正在启动 Grizzly 容器并加载 ResourceConfig到只有 Service 的服务器类(class)。当然,您可以向配置中添加更多类。如果需要,您可以使用“真实”资源配置。

上面的测试使用了这个依赖

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
<version>${jersey2.version}</version>
</dependency>

我更喜欢的另一种选择是使用 Jersey Test Framework ,这将为您启动一个嵌入式容器。测试可能看起来更像

public class SimpleTest extends JerseyTest {

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

@Test
public void test() {
String hello = target("service").request().get(String.class);
}
}

使用这个依赖

<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>${jersey2.version}</version>
<scope>test</scope>
</dependency>

嵌入式 Grizzly 容器将在引擎盖下启动,使用您的 ResourceConfig配置。在上面的两个示例中,都假定为 @Path Service 的值类是 service ,如您在测试网址中所见。

一些资源

一些例子


更新

如果您不使用 Maven,这里是运行 Jersey Test Fraemwork 的嵌入式 Grizzly 容器所需的 jar

enter image description here

我通常会搜索我所有的 jar here .您可以选择版本,下一页中应该有一个链接可供下载。您可以使用搜索栏搜索其他内容。

这是一个简单的运行示例,一旦你拥有了所有的 jar

import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.spi.container.servlet.WebComponent;
import com.sun.jersey.test.framework.JerseyTest;
import com.sun.jersey.test.framework.WebAppDescriptor;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import junit.framework.Assert;
import org.junit.Test;

public class SimpleTest extends JerseyTest {

@Path("service")
public static class Service {
@GET
public String getTest() { return "Hello World!"; }
}

public static class AppConfig extends DefaultResourceConfig {
public AppConfig() {
super(Service.class);
}
}

@Override
public WebAppDescriptor configure() {
return new WebAppDescriptor.Builder()
.initParam(WebComponent.RESOURCE_CONFIG_CLASS,
AppConfig.class.getName())
.build();
}

@Test
public void doTest() {
WebResource resource = resource().path("service");
String result = resource.get(String.class);
Assert.assertEquals("Hello World!", result);
System.out.println(result);
}
}

您很可能不会拥有资源和 ResourceConfig在与测试相同的类(class)中,但我只想保持简单,并且在一个类(class)中所有内容都可见。

无论您使用的是 web.xml 还是 ResourceConfig子类(如上所示),您可以使用单独的 ResourceConfig 来减少测试内容, 内置在测试类中,就像我所做的那样。否则,如果您使用的是正常的 ResourceConfig类,您可以在 configure 中替换它方法。

configure方法,几乎​​只是用 Java 代码构建一个 web.xml 文件。您可以在 WebAppDescriptor.Builder 中看到不同的方法, 比如 initParam ,与 <init-param> 相同在您的网络 xml 中。您可以简单地在参数中使用字符串,但有一些常量,正如我在上面使用的那样。

@Test您是将要运行的常规 JUnit 测试吗?它正在使用 Jersey 客户端。但不是创建 Client ,您可以简单地使用预配置的 Client通过访问 resource()方法,返回 WebResource .如果您熟悉 Jersey Client,那么这个类对您来说应该不陌生。

关于java - 如何测试 Jersey REST Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358940/

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