java - 使用代码而不是 beans.xml 注入(inject) @alternative bean

标签 java junit ejb cdi ejb-3.1

我们正在 JUnit 中使用 EJBContainer 测试 EJB。测试 bean 调用的另一个 EJB 被测试模拟为 @alternative bean 。这个模拟 bean 配置为 <alternative>beans.xml

一切正常,EJB 经过测试并使用模拟服务。

问题:是否可以只用代码而不是使用 beans.xml 来做同样的事情?

当然是beans.xml提供了很好的灵 active ,尽管有时人们可能想要一个不同的 @alternative对于同一个 bean 以及为同一项目中的单个/其他测试选择一个特定的可能性。也许另一种解决方案是特定的 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>

最佳答案

无需创建独立的@Alternative 实现,您可以扩展现有实现并使用@Specializes 对其进行注释。

另请参阅:http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Specializes.html

关于java - 使用代码而不是 beans.xml 注入(inject) @alternative bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18313329/

相关文章:

java - 如何在 JUnit 中打印错误结果?

Java EE : EJB Entity, Web 独立版

java - 如何避免捕获 EJB Rollbacked ApplicationException 后回滚?

java - 库中的 EJB - 重用 EJB

java - 如何从 acroform 获取字体颜色?

java - 多模块设置的测试覆盖率

java - JSON 的 Jackson 解析器是否支持尾随逗号?

java - ArrayList 越界异常?薪资类

java - Mockito 允许不同的参数类型模拟重载方法

java - Junit参数化测试,不一样的想法