我們正在JUnit中用EJBContainer測試一個EJB。由測試bean調用的另一個EJB被測試用一個@alternative
bean模擬。這個模擬豆被配置爲<alternative>
in beans.xml
用代碼注入@alternative bean,而不是beans.xml
一切工作就像一個魅力,EJB被測試並使用模擬服務。
問題:是否可以僅使用代碼執行相同的操作,而不使用beans.xml?
當然,beans.xml
具有很好的靈活性,儘管有時候人們可能想要爲同一個bean有不同的@alternative
,並且有可能在同一個項目中爲單個/其他測試選擇一個特定的測試。也許另一個解決方案將是特定的beans.xml
某些測試(問題如何選擇它)?
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>