Arquillian vs EJB可嵌入容器

时间:2014-06-19 15:51:03

标签: ejb-3.1 jboss-arquillian

我试图理解Java EE 6为EJB模块和Arquillian的可嵌入单元测试提供的EJBContainer类之间的差异。

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

2 个答案:

答案 0 :(得分:5)

完全披露:我是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 runtime因此它eliminates 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()) ;
    }
}

我希望这会有所帮助。

答案 1 :(得分:2)

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

我已经为Arquillian的新手改写了一系列帖子,所以如果你找到与你的问题相关的第一部分。你可以在here

找到它