我是一个Web开发人员,最终在一些Java EE开发(Richfaces,Seam 2,EJB 3.1,JPA)中工作。要测试JPA,我使用超音速和Mockito。但是我缺乏更深入的EJB知识。在TDD中,为什么要使用OpenEJB以及为什么使用Arquillian?
有人可能会争辩说,我们应该使用OpenEJB和Arquillian,但为什么? 我什么时候需要做容器依赖性测试?我需要OpenEJB和Arquillian的可能测试场景是什么?
请赐教:)
我是一个Web开发人员,最终在一些Java EE开发(Richfaces,Seam 2,EJB 3.1,JPA)中工作。要测试JPA,我使用超音速和Mockito。但是我缺乏更深入的EJB知识。在TDD中,为什么要使用OpenEJB以及为什么使用Arquillian?
有人可能会争辩说,我们应该使用OpenEJB和Arquillian,但为什么? 我什么时候需要做容器依赖性测试?我需要OpenEJB和Arquillian的可能测试场景是什么?
请赐教:)
在这种情况下有两个方面。
你嘲笑这整个环境,只是单独测试每种方法。 单元测试细化为,速度非常快。这是因为您可以在每次对代码进行重要更改时执行它们。如果它们更加复杂和耗时,开发者不会像他应该那样频繁地点击'测试'按钮。
正如你看到的,集成测试是粗粒度和他们在容器正在执行(或基本上是:在生产环境中)他们要慢得多。这些测试通常不会在每次代码更改后由开发人员执行。
当然,您可以在嵌入模式下运行EJB容器,就像您可以在Java SE中执行JPA一样。重点在于人工环境为您提供了基本的服务,但您将以调整为结束,并且仍然以比实际容器更少的灵活性结束。
Arquillian使您能够在您选择的容器上创建生产环境,并在此环境中执行测试(使用数据源,JMS目标以及您期望在生产环境中看到的大量其他配置)。 )
希望它有帮助。
今年我参加了Devoxx,并有机会回答JBOSS问题。 一些测试场景(我所管理的东西涂抹下):
谢谢,perf等答案。 JMS部分对我来说尤其有趣。 –
很高兴我可以有任何帮助:-) –
良好的写作。我很好奇“关键在于人为环境给你提供的基本服务,但你最终会调整它,并且仍然以比实际容器更少的灵活性结束”的意思是。 EJBContainer API背后的想法是,您正在使用真正的EJB容器。遵守或行为不应有任何差异。 –