Mockito认为当使用@Context注入时,方法的参数为null

时间:2018-01-23 01:23:28

标签: junit mockito guice

我有一个名为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

在mockito中测试这个类
@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进行模拟

0 个答案:

没有答案