我有一个实现ServletContextListener
的对象,根据Java EE servlet规范,它由servlet容器在部署/启动时通过其contextInitialized(ServletContext)
方法调用。
我正在尝试编写一个单元测试来模拟启动和部署ServletContextListener
的servlet容器(以便我可以确定应用程序是否正确初始化)。
这可能,如果可行,怎么样?它是特定于容器的吗?如果是这样我正在使用OGS。寻找看起来某事的代码:
@Test
public void shouldBootstrapAppAtDeployTime() {
// Given
GlassFishContainer container = new GlassFishContainer(); // ha!
MyApp app = mock(MyApp.class); // MyApp implements ServletContextListener
// When - deploy app to container
// Causes app.contextInitialized(ServletContext) to be called
container.deploy(app);
// Then - verify the method was called with any ServletContext
mock.verify(app.contextInitialized(Matchers.any());
}
这是一个草率的伪代码,其中有一些实施不当的Mockito用于演示目的(只是为了实现我的意图)。提前谢谢!
答案 0 :(得分:2)
也许你可以用Arquillian解决这个问题:http://arquillian.org/features/
来自网页:
Arquillian将您的测试带到运行时,让您可以访问容器资源,有意义的反馈以及有关代码如何工作的见解。
答案 1 :(得分:2)
我认为你的方法有点误。你的单元测试伪代码所做的是测试它正确调用你的ServletContextListener的容器逻辑 - 我会相信容器正确地做了。
我要做的是直接测试你的监听器类,实例化它,使用模拟ServletContext调用contextInitialized()方法(我看到你熟悉Mockito,这是一个很好的工具!),并做你的断言如果你的ServletContextListener按预期完成了它的工作。
答案 2 :(得分:0)
不确定是否有这样的测试框架。即使它存在,它也不在真实环境中进行测试(可能与测试环境不同)。
编写此类测试用例的最佳方法是: