我写了一个泽西岛请求过滤器,我想单元测试它。以下是代码。如何从java中的泽西模拟requestContext.getUriInfo()。getPathParameters()
`@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
logPathParameters(containerRequestContext);
}
private void logPathParameters(ContainerRequestContext requestContext) {
StringBuilder parameterStringBuilder = new StringBuilder();
MultivaluedMap<String, String> pathParameters= requestContext.getUriInfo().getPathParameters();
if(!pathParameters.isEmpty()) {
Iterator iterator = pathParameters.keySet().iterator();
while (iterator.hasNext()) {
String name = iterator.next().toString();
String paramValue = pathParameters.getFirst(name);
String shortParamName = getShortNameForPathParameter(name);
parameterStringBuilder.append(String.format("paramName: %s, paramValue: %s; ", shortParamName, paramValue));
}
if (parameterStringBuilder.length() > 0) {
MDC.put("pathParam ", parameterStringBuilder.toString());
System.out.println(parameterStringBuilder.toString());
}
}
}`
要单元测试上面的过滤函数我必须模拟ContainerRequestContext。所以我创建了下面的函数。
private ContainerRequestContext mockContainerRequest(String uri) throws URISyntaxException {
ContainerRequestContext requestContext = mock(ContainerRequestContext.class);
UriInfo uriInfo = mock(UriInfo.class);
URI requestUri = new URI(uri);
when(uriInfo.getRequestUri()).thenReturn(requestUri);
when(requestContext.getUriInfo()).thenReturn(uriInfo);
return requestContext;
}
在这里,我想嘲笑uriInfo的getPathParameters,这将返回存在于输入URI字符串给这个函数路径参数。 是否有任何实用功能可以为我做到这一点。就像我将url传递给它,它应该返回路径参数的多值图。
在下面的问题的答案中提到了类似的东西。
这是查询参数进行。我想为路径参数做这件事。我不想手动构建它。某种效用函数应该是好的。
如果你要求的是一个效用函数,那么这个问题是无关紧要的。如果你试图自己解决它并且遇到问题,那么[描述问题](http://meta.stackoverflow.com/questions/254393)以及到目前为止已经做了什么来解决它。 – Nkosi
但是我相信你忘记它只是一个模拟,所以你基本上可以返回你想要测试的地图 – Nkosi