希望你能帮我解决一段时间以来我一直在努力的事情。我正在使用arquillian进行我的积分测试,效果非常好。所以我想的不是测试我的持久层,而是想隔离我的休息服务层来测试它。这次使用arquillian,arquillian rest扩展(http://arquillian.org/modules/rest-extension/)听起来非常适合我的服务层的黑盒测试,并将其与mockito结合使用。
我的应用程序从上到下存在多个层:
所有内容都部署在java ee6容器中并使用该技术。
为了测试保存其余服务的交互层我正在使用arquillian rest扩展,这避免了在我的代码中设置httpclient并调用其余调用的麻烦。这一切都是通过使用arquillian rest扩展完成的,这听起来不错!?
我的休息服务注入了几个代表业务层的CDI bean。为了避免必须一次测试所有图层,我希望使用模拟隔离其余图层。所以我尝试使用mockito来模拟其余图层中注入的bean。不幸的是,我的模拟工作在我的测试中,但模拟没有插入我的休息服务中。
为了解决这个问题,我解决了另一个名为autodiscover的arquillian扩展,但不知道该做什么或配置什么来让mocks在我的项目中工作。
希望你们能帮助我。答案 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。