Guice-servlet单元测试

时间:2015-01-04 04:31:23

标签: java unit-testing servlets guice guice-servlet

后台:我正在使用带有guice框架的guice-servlet开发servlet。我想通过以下方式测试我的servlet:

  1. Servlet 单元测试:通过提供get / post请求将servlet与其他依赖项隔离并模拟客户端
  2. Servlet 集成测试:模拟客户端,但没有servlet隔离。此外,作为集成测试的一部分,我想测试我与Guice本身的集成。
  3. 问题:我正在寻找servlet测试框架,它可以让我执行上述两种测试。

    与此同时,我查看了HttpUnit,但我找不到将Guice连接到它的方法:servlet可以在ServletRunner中注册,但它们是由类提供的名称。这意味着ServletRunner将实例化它们(不注入依赖项)。

    我还发现tadedon项目的GuiceServletMockModule。似乎正是我正在寻找的东西。但我不确定它是否仍然存在。例如,我无法从他们的maven存储库中获取他们的maven包。

    谢谢

1 个答案:

答案 0 :(得分:3)

为了对你的servlet(HttpServlet的实例)进行单元测试,你不需要任何框架 - 你可以创建servlet类的新实例,并在传递模拟的请求和响应对象时直接调用所需的方法。

如果需要将代码与Guice依赖关系隔离,可以使用配置了mocks的Injector(在@Before方法中)创建类的实例,例如:

Injector injector = Guice.createInjector( new AbstractModule() {
    @Override
    protected void configure() {
        bind( MyClass.class ).toInstance( mock(MyClass.class) );
        bind( AnotherClass.class ).toInstance( mock(AnotherClass.class) );
    }
} );
//Create new instance of class  that needs injections
ThirdClass thirdInstance = injector.getInstance( ThirdClass.class );

对于集成测试,您可以尝试使用SoapUI - 它适用于SOAP和REST应用程序,但您可以将其调整为通用servlet测试。