使用EJB 3 / JPA启动新项目,主要是无状态会话bean和批处理作业。我过去在标准的Java webapps上使用过JUnit,它看起来效果很好。在EJB2中,单元测试很麻烦,需要一个运行容器(如JBoss)才能进行调用。现在我们将在EJB3 / JPA中工作,我想知道公司正在使用什么来编写和运行这些测试。 Junit和JMock是否仍然被认为是相关的,还是有其他新的框架,我们应该调查?
答案 0 :(得分:11)
使用EJB3,您可以像常规POJO一样测试EJB,也可以使用嵌入式EJB容器作为托管bean。
对于JPA,您可以为测试嵌入JPA实现并使用内存数据库,也可以完全模拟数据层。
对于我上一个EJB项目,我编写了一些glue code来测试EJB,因为嵌入式EJB容器还不够成熟,但现在我会选择嵌入式EJB容器+ JUnit。
一些资源
但还有很多其他人很容易找到
答案 1 :(得分:8)
对于单元测试,您可以使用JUnit,TestNG和您最喜欢的模拟框架(EasyMock,Mockito,PowerMock,JMockit, JMock)。
对于集成测试,您可以从测试中启动/停止可嵌入容器(JBoss,OpenEJB,GlassFish v3)。或者,看看Arquillian,这是一个最近用于Java EE应用程序集成测试的新玩家:
Arquillian项目的任务是提供一个简单的测试工具,开发人员可以使用它来为他们的Java应用程序(最有可能是企业应用程序)生成广泛的集成测试。测试用例可以在容器内执行,与被测代码一起部署,或者通过与容器协调,充当已部署代码的客户端。
为了避免在开发人员的构建环境中引入不必要的复杂性,Arquillian透明地与熟悉的测试框架(例如JUnit 4,TestNG 5)集成,允许使用现有的IDE,Ant和Maven测试插件启动测试而无需任何附加组件。
同时检查Improving the Testability of Java EE With Arquillian 1.0.0 Alpha 1 Released和Arquillan空格。看起来很有趣IMO。
答案 2 :(得分:3)
答案 3 :(得分:1)
一个选项也是使用Spring,但当然你的架构也将基于运行时的Spring。我喜欢Spring的原因是在测试阶段很容易注入所需的模拟数据和对象,因为你可以在JUnit测试用例中注释要使用的上下文文件:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:test-context.xml"})
public class MyClassTest {
@Autowired
private MyClass myClass;
@Test
public void testMyMethod() {....}
但是如果你不想使用Spring,那么这是无关紧要的:)另一方面,之后很容易从Spring切换出来。
答案 4 :(得分:1)
我会建议Arquillian。 使用Arquillian,您可以选择测试普通的EJB或CDI bean。您可以再次运行嵌入式,托管或远程EE容器的测试。 Arquillian项目不断进行维护......
然而,进行第一次arquillian测试并不总是那么容易。您可能无法找到正确的arquillian版本和容器版本的依赖项。我已经发布了关于此的教程序列。但是为了不让我怀疑推广,链接不会发布在这里。如果你愿意,你可以直接谷歌“与Arquillian part1教程EJB3集成测试”。