如何使用模拟的arquillian休息扩展

时间:2013-12-27 11:47:53

标签: mockito jboss-arquillian

希望你能帮我解决一段时间以来我一直在努力的事情。我正在使用arquillian进行我的积分测试,效果非常好。所以我想的不是测试我的持久层,而是想隔离我的休息服务层来测试它。这次使用arquillian,arquillian rest扩展(http://arquillian.org/modules/rest-extension/)听起来非常适合我的服务层的黑盒测试,并将其与mockito结合使用。

我的应用程序从上到下存在多个层:

  • ui(javascript)
  • 交互层(使用resteasy的Rest服务)
  • 业务层(无状态EJB)
  • 持久层(DAOs)

所有内容都部署在java ee6容器中并使用该技术。

为了测试保存其余服务的交互层我正在使用arquillian rest扩展,这避免了在我的代码中设置httpclient并调用其余调用的麻烦。这一切都是通过使用arquillian rest扩展完成的,这听起来不错!?

我的休息服务注入了几个代表业务层的CDI bean。为了避免必须一次测试所有图层,我希望使用模拟隔离其余图层。所以我尝试使用mockito来模拟其余图层中注入的bean。不幸的是,我的模拟工作在我的测试中,但模拟没有插入我的休息服务中。

为了解决这个问题,我解决了另一个名为autodiscover的arquillian扩展,但不知道该做什么或配置什么来让mocks在我的项目中工作。

希望你们能帮助我。

1 个答案:

答案 0 :(得分:0)

事实上,当运行黑匣子测试时,例如休息调用或基于selenium的测试,无论是自动发现还是byteman extension都不会导致您的测试被驱动 >容器,您只能根据已部署的内容进行转发。

另一种方法是部署虚假服务,例如,如果你有一个这样的休息端点:

   @Path("rest")  
   public void MyEndpoint{
      @Inject 
      RealService realService;

      @Path("rest-resource")
      @GET
      public Response methodUnderTest(){
         realService.doSomething();
         return Response.ok().build();
      }
}

在您的测试 @Deployment 上,您可以添加 FakeService 而不是 RealService ,其中FakeService是CDI替代或Bean专业化,我在博客上写过关于arquillian和mocks的文章,你可以read the post here