【发布时间】:2013-08-19 12:02:31
【问题描述】:
我们正在使用 JUnit 中的 EJBContainer 测试 EJB。被测试的 bean 调用的另一个 EJB 被测试用 @alternative bean 模拟。这个mock bean在beans.xml中配置为<alternative>
一切都像魅力一样工作,EJB 经过测试并使用模拟服务。
问题:是否可以仅使用代码而不是使用 beans.xml 来做同样的事情?
当然beans.xml 提供了很好的灵活性,尽管有时可能希望为同一个bean 使用不同的@alternative,并且可以为同一项目中的单个/其他测试选择一个特定的@alternative。对于某些测试,另一种解决方案可能是特定的beans.xml(问题是如何选择它)?
我们的一些测试代码(ExtensionMock 被测试的 EchoRemote 实现和部分测试调用):
public class EchoTest {
private EJBContainer ejbContainer;
private Context ctx;
@Before
public void setUp() throws NamingException {
ejbContainer = EJBContainer.createEJBContainer();
ctx = ejbContainer.getContext();
}
@After
public void tearDown() {
ejbContainer.close();
}
@Test
public void testFindAll() {
try {
EchoRemote userEJB = (EchoRemote) ctx.lookup("java:global/ssb-ejb/Echo!examples.ssb.EchoRemote");
assertNotNull(userEJB);
assertEquals("Hello World", userEJB.echo("Hello World"));
} catch (NamingException e) {
throw new AssertionError(e);
}
}
}
<beans>
<alternatives>
<class>examples.ssb.EchoExtensionMock</class>
</alternatives>
</beans>
【问题讨论】:
标签: java junit ejb cdi ejb-3.1