【问题标题】:Arquillian vs EJB embeddable containerArquillian vs EJB 可嵌入容器
【发布时间】:2014-06-19 15:51:02
【问题描述】:

我试图了解 Java EE 6 提供的用于 EJB 模块的可嵌入单元测试的 EJBContainer 类与 Arquillian 之间的区别。

是否有很好的资源或有人可以帮助我理解这一点?当我可以使用可嵌入容器测试 EJB 时,是否值得编写 Arquillian 测试?

【问题讨论】:

  • 感谢您更新语法 Arjan。有没有你可以帮忙的答案?
  • EJBContainer 特定于 EJB。假设您的应用程序在 GlassFish 上运行,您将如何获得 EJBContainer?您将如何测试诸如 REST 端点或 JSF 控制器之类的东西? Arquillian 比仅测试 EJB 更全面。如果您提供更多用例,也许会更容易回答。

标签: ejb-3.1 jboss-arquillian


【解决方案1】:

完全披露:我是 Arquillian 的贡献者

Arquillian 是integration testing 的组件模型。

通过使用EJBContainer,您带来了runtime(the container in this case) in your tests。通过在您的测试中引入运行时,您add configuration complexity 给他们。 Arquillian 建立在opposite philosophy 之上。 Arquillian 做了相反的事情,它 brings your test to the runtimeeliminates the testing bandgap(从单元测试到集成测试时的复杂性差距)。

您将在以下示例中意识到上述差异。

使用 Arquillian 测试 EJB:

@RunWith(Arquillian.class)
public class ArquillianGreeterTest {

    @Deployment
    public static JavaArchive createTestArchive() {
        return ShrinbkWrap.create("greeterTest.jar", JavaArchive.class)
            .addClasses(Greeter.class)
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
    }

    @EJB private Greeter greeter;

    @Test
    public void testGreeting() {
        assertNotNull(greeter);
        assertEquals("Welcome to the Arquillian Universe :)", greeter.greet());
    }

}

使用 EJBContainer 的相同示例如下所示:

public class EJBContainerGreeterTest {

    private static EJBContainer ejbContainer;
    private static Context ctx;

    @BeforeClass
    public static void setUpClass() throws Exception {
        ejbContainer = EJBContainer.createEJBContainer();
        ctx = ejbContainer.getContext();
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
        if (ejbContainer != null) {
            ejbContainer.close();
        }
    }

    @Test
    public void testGreeting() {
        Greeter greeter = (Greeter)
                ctx.lookup("java:global/classes/Greeter");

        assertNotNull(greeter);
        assertEquals("Welcome to the Arquillian Universe :)", greeter.greet()) ;
    }
}

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    Arquillian 最终建立在这些想法之上。把它想象成一个空的占位符,一辆没有引擎的汽车。但它可以接受不同的引擎,例如 GlassFishEngine、Jboss 引擎、Websphere 引擎。因此,您使用 arquillian,定义您选择的引擎,将要测试的代码作为乘客放置,然后将汽车放在一边。

    我已经为新手重写了一系列关于 Arquillian 的帖子,所以如果您发现与您的问题相关的第一部分。你可以在这里找到它here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      相关资源
      最近更新 更多