gpt4 book ai didi

java - GWT RPCServlet - Junit + getThreadLocalRequest

转载 作者:行者123 更新时间:2023-12-01 13:01:54 25 4
gpt4 key购买 nike

在我的 RPCServlet 中,我使用方法 AbstractRemoteServiceServlet.getThreadLocalRequest() 来获取 HttpSession。现在我想对其进行单元测试。我正在使用 Mockito,并认为我可以模拟一切,但该方法是最终的且 protected 。

还有其他方法可以对 AbstractRemoteServiceServlet.getThreadLocalRequest().getSession() 进行单元测试

最佳答案

最后你试图获得一个 session 。在我们的例子中,我们这样做解决了这种情况:

使用 GUICE 获取我们的实例(使它们在测试的 GIVEN 部分中可用)

public class TestServerModule  extends com.google.inject.AbstractModule {
@Override
protected void configure() {
.....
bind(HttpServletRequest.class).to(MockRequest.class).in(Singleton.class);
bind(HttpServletResponse.class).to(MockResponse.class).in(Singleton.class);
....
}

....

@Provides
@Singleton
RequestUtil getRequestUtil(final HttpServletRequest req, final HttpServletResponse resp) {

return new RequestUtilsImpl() {
public HttpServletRequest getThreadRequest() {
return req;
}

public HttpServletResponse getThreadResponse() {
return resp;
}
};
}

RequestUitl 对象包含与 Session 相关的所有内容以及更多服务器内容(这对您的问题并不重要:D)。这里重要的部分是您可以访问 getThreadRequest(),因此您可以访问 getSession() 方法。

有什么问题吗?您的实例中不能有真正的 HttpServletRequest 对象,因此您需要模拟它们。为此,我们在顶部指定了绑定(bind)规则。

最后你的测试应该是这样的:

@RunWith(...)
@GuiceModules({TestServerModule.class, ....})
public class YourTest extends junit.framework.TestCase {

@Inject RequestUtil requestUtil;
....

@Test public void
test_session_after_doing_something() {
//GIVEN
HttpSession mockedSession = requestUtil.getThreadRequest().getSession();
....
}


....
}

关于java - GWT RPCServlet - Junit + getThreadLocalRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com