gpt4 book ai didi

java - 如何获取 javax.ws.rs.core.UriInfo 的实例

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:27 25 4
gpt4 key购买 nike

是否有任何 javax.ws.rs.core.UriInfo 的实现,我可以使用它来快速创建一个实例进行测试。这个界面很长,我只是想测试一下。我不想在这个接口(interface)的整个实现上浪费时间。

更新:我想为与此类似的函数编写单元测试:

@GET
@Path("/my_path")
@Produces(MediaType.TEXT_XML)
public String webserviceRequest(@Context UriInfo uriInfo);

最佳答案

您只需使用 @Context 注释将其作为字段或方法参数注入(inject)即可。

@Path("resource")
public class Resource {
@Context
UriInfo uriInfo;

public Response doSomthing(@Context UriInfo uriInfo) {

}
}

除了你的资源类,它还可以注入(inject)到其他提供者,如ContainerRequestContextContextResolverMessageBodyReader等。

编辑

Actually I want to write a junit test for a function similar to your doSomthing() function.

我没有在你的帖子中提到这一点。但是我可以想到一些用于单元测试的选项

  1. 只需创建一个 stub ,仅实现您使用的方法。

  2. 使用类似 Mockito 的 Mocking 框架,并模拟 UriInfo。示例

    @Path("test")
    public class TestResource {
    public String doSomthing(@Context UriInfo uriInfo){
    return uriInfo.getAbsolutePath().toString();
    }
    }
    [...]
    @Test
    public void doTest() {
    UriInfo uriInfo = Mockito.mock(UriInfo.class);
    Mockito.when(uriInfo.getAbsolutePath())
    .thenReturn(URI.create("http://localhost:8080/test"));
    TestResource resource = new TestResource();
    String response = resource.doSomthing(uriInfo);
    Assert.assertEquals("http://localhost:8080/test", response);
    }

    你需要添加这个依赖

    <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.0</version>
    </dependency>

如果你想做一个集成测试,在实际的 UriInfo 被注入(inject)的地方,你应该查看 Jersey Test Framework

这是一个完整的 Jersey 测试框架示例

public class ResourceTest extends JerseyTest {

@Path("test")
public static class TestResource {
@GET
public Response doSomthing(@Context UriInfo uriInfo) {
return Response.ok(uriInfo.getAbsolutePath().toString()).build();
}
}

@Override
public Application configure() {
return new ResourceConfig(TestResource.class);
}

@Test
public void test() {
String response = target("test").request().get(String.class);
Assert.assertTrue(response.contains("test"));
}
}

只需添加这个依赖

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

它使用内存容器,这对于小型测试来说是最有效的。如果需要,还有其他支持 Servlet 的容器。请查看我上面发布的链接。

关于java - 如何获取 javax.ws.rs.core.UriInfo 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29844097/

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