如何使用UriInfo测试JERSEY控制器方法

时间:2013-03-09 12:56:21

标签: java unit-testing java-ee jersey

我正在为JERSEY项目编写单元测试。

对于没有查询字符串的方法,我可以实例化控制器并调用方法。

也适用于路径中的参数,因为它们显示为方法的字符串参数。

但是当我获得queryStrings时,模式有一个特殊参数(@Context UriInfo url)

如何在单元测试中构建UriInfo参数? 为什么这个类没有构造函数?

2 个答案:

答案 0 :(得分:6)

如果您在测试中使用Mockito,则可以改为使用UriInfo:

import java.net.URI;
import javax.ws.rs.core.UriInfo;

UriInfo mockUriInfo = mock(UriInfo.class);
when(mockUriInfo.getRequestUri()).thenReturn(new URI("http://www.test.com/go"));

答案 1 :(得分:2)

UriInfo是一个接口,因此您无法直接创建其对象。您需要对其进行子类化并创建自己的UriInfo类。所以你的uriinfo类应该将String uri / url转换为UriInfo对象。

public class UriInformation implements UriInfo {
    MultivaluedMap<String, String> pathParamMap;
    MultivaluedMap<String, String> queryParamMap;
    public UriInformation(UriInfo uriInfo) {
        //parse uriInfo 
    }
 //setters/getters
}

因此,您可以通过单元测试资源,而无需在tomcat / server中运行它。