【问题标题】:Best current framework for unit testing EJB3 / JPA [closed]用于单元测试 EJB3 / JPA 的当前最佳框架 [关闭]
【发布时间】:2011-01-29 22:45:46
【问题描述】:

使用 EJB 3 / JPA 开始一个新项目,主要是无状态会话 bean 和批处理作业。过去我在标准 Java webapps 上使用过 JUnit,它似乎工作得很好。在 EJB2 中,单元测试很痛苦,需要一个运行的容器(例如 JBoss)来进行调用。既然我们将在 EJB3 / JPA 中工作,我想知道哪些公司正在使用哪些公司来编写和运行这些测试。 Junit 和 JMock 是否仍然被认为是相关的,或者是否有其他新的框架出现,我们应该调查?

【问题讨论】:

    标签: java unit-testing jpa jakarta-ee ejb-3.0


    【解决方案1】:

    恕我直言,是的,它们仍然相关。

    使用 EJB3,您可以像常规 POJO 一样测试 EJB,也可以使用嵌入式 EJB 容器作为托管 bean。

    JPA 也是如此,您可以为测试嵌入 JPA 实现并使用内存数据库,也可以完全模拟数据层。

    对于我上一个 EJB 项目,我写了一些 glue code 来测试 EJB,因为嵌入式 EJB 容器还不够成熟,但现在我会选择嵌入式 EJB 容器 + JUnit。

    一些资源

    但还有很多其他的很容易找到

    【讨论】:

      【解决方案2】:

      您可以选择 Apache OpenEJB,它是一个轻量级的 EJB3.0 实现,可以嵌入到 TestNG 中。

      Here 你可以找到使用 OpenEJB、TestNG 和 jMockIt 进行单元测试的示例代码。

      【讨论】:

        【解决方案3】:

        对于单元测试,您可以使用 JUnit、TestNG 和您最喜欢的模拟框架(EasyMockMockitoPowerMockJMockitJMock)。

        对于集成测试,您可以在测试中启动/停止可嵌入容器(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 ReleasedArquillan 空格。 IMO 看起来很有趣。

        【讨论】:

        • 我会将针对嵌入式容器的单个 EJB 测试归类为单元测试。 IMO 集成测试更多地使用 Selenium 等。
        【解决方案4】:

        还有一个选择是使用 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 中切换出来。

        【讨论】:

          【解决方案5】:

          我会建议 Arquillian。 使用 Arquillian,您可以选择测试普通 EJB 或 CDI bean。您可以在嵌入式、托管或远程 EE 容器上再次运行测试。 Arquillian 项目正在持续维护中......

          但是,让您的第一个 arquillian 测试运行并不总是那么容易。您可能无法找到正确的 arquillian 版本和容器版本的依赖项。我已经发布了一个关于这个的教程系列。但为了不让我怀疑推广,链接没有贴在这里。如果您愿意,您可以在 Google 上搜索“Tutorial EJB3 Integration Test with Arquillian part1”。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-16
            • 1970-01-01
            • 2012-10-18
            相关资源
            最近更新 更多