我有一个名为DynamicAuthFilter
的过滤器,其中我使用HTTPServletRequest
注入HTTPServletResponse
和@Context
对象。
public class DynamicAuthFilter implements ContainerRequestFilter, ContainerResponseFilter, WriterInterceptor {
private final List<AuthFilter> filters;
@Context
private HttpServletRequest request;
@Context
private HttpServletResponse response;
在这个类中,有一个filter方法,它在上面类的构造函数中定义的过滤器列表上调用filter方法。
@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
if (filters.isEmpty()) {
// no filters enabled, so no auth is necessary
return;
}
// apply each matching filter
for (AuthFilter filter : filters.stream()
.filter(f -> f.matchRequest(requestContext))
.collect(Collectors.toList())) {
appendAuthMethod(requestContext, filter.getName());
filter.filter(requestContext, request, response);
}
}
filters
子类AuthFilter
中的每个过滤器。我试图用junit
@RunWith(MockitoJUnitRunner.class)
public class DynamicAuthFilterTest {
@Mock
private AuthFilter testFilter;
@Mock
private AuthFilter testFilter2;
@Mock
private ContainerRequestContext requestContext;
@Mock
private ContainerResponseContext responseContext;
但我在filter.filter(requestContext, request, response)
的{{1}}收到错误消息。测试方法是:
DynamicAuthFilter
错误是
@Test
public void testRequestFilter_OneFilter_RequestMatch() throws Exception {
DynamicAuthFilter filter = new DynamicAuthFilter(ImmutableList.of(testFilter));
HttpServletResponse response = mock(HttpServletResponse.class);
HttpServletRequest request = mock(HttpServletRequest.class);
when(testFilter.matchRequest(requestContext)).thenReturn(true);
filter.filter(requestContext);
filter.filter(requestContext, responseContext);
filter.aroundWriteTo(writerInterceptorContext);
verify(testFilter).filter(requestContext, request, response);
verify(testFilter).filter(requestContext, responseContext);
verify(testFilter).aroundWriteTo(writerInterceptorContext);
}
我应该如何在注入时Argument(s) are different! Wanted: testFilter2.filter( requestContext ); -> at com.company.filter.auth.DynamicAuthFilterTest.testRequestFilter_TwoFilters_OneRequestMatch(DynamicAuthFilterTest.java:100) Actual invocation has different arguments: testFilter2.filter( requestContext, null, null ); -> at com.company.filter.auth.DynamicAuthFilter.filter(DynamicAuthFilter.java:70)
Argument(s) are different! Wanted:
testFilter2.filter(
requestContext
);
-> at com.company.filter.auth.DynamicAuthFilterTest.testRequestFilter_TwoFilters_OneRequestMatch(DynamicAuthFilterTest.java:100)
Actual invocation has different arguments:
testFilter2.filter(
requestContext,
null,
null
);
-> at com.company.filter.auth.DynamicAuthFilter.filter(DynamicAuthFilter.java:70)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.company.filter.auth.DynamicAuthFilterTest.testRequestFilter_TwoFilters_OneRequestMatch(DynamicAuthFilterTest.java:100)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(Unknown Source)
at org.mockito.runners.MockitoJUnitRunner.run(Unknown Source)
和HttpServletRequest
进行模拟