我试图理解Java EE 6为EJB模块和Arquillian的可嵌入单元测试提供的EJBContainer
类之间的差异。
是否有良好的资源或有人可以帮助我理解这一点?当我可以使用可嵌入容器测试EJB时,是否值得编写Arquillian测试?
答案 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
找到它