首页 > 解决方案 > JMockit 模拟类为子方法返回 null

问题描述

我想测试一个从 JAX-RS 实现 ContainerRequestFilter 的过滤器。

实现类是:

public class CookieRequestFilter implements ContainerRequestFilter {

public static final String EXCLUDE_FROM_FILTER = ".*healthy$|.*alive$";

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    URI uri = requestContext.getUriInfo().getAbsolutePath();
    if (uri.getPath().matches(EXCLUDE_FROM_FILTER)) {
        return;
    }
    Cookie cookie = requestContext.getCookies().get("cookie_identifier");
    // some other code here
}
}

单元测试使用 JMockit 框架运行。测试是:

@RunWith(JMockit.class)
public class CookieRequestFilterTest {

@Tested
private CookieRequestFilter cookieRequestFilter;

@Test
public void filterCookie(@Mocked ContainerRequestContext request) throws IOException {
    Map<String, Cookie> cookies = new HashMap<>();
    String identifier = "1";
    cookies.put("cookie_identifier", getCookie(identifier));
    new Expectations() {{
        request.getCookies();
        times = 1;
        result = cookies;
    }};

    cookieRequestFilter.filter(request);
}

private NewCookie getCookie(String value) {
    return new NewCookie("cookie_identifier",
                         value,
                         "/",
                         "",
                         1,
                         null,
                         840,
                         new Date(new Date().getTime() + 840 * 1000),
                         true,
                         false);
}
}

它给了我一个 NPE

uri.getPath().matches(EXCLUDE_FROM_FILTER)

有人可以帮我解决这个问题吗?

标签: unit-testingjmockit

解决方案


推荐阅读