當每次測試獨立執行時,我已設法使用備用描述符與在OpenEJB上運行的單元測試一起工作,使用依賴EJB組件的存根。但是一旦我引入了一個測試套件,看起來部署描述符是從添加到套件的第一個測試中獲得的。使用jUnit測試套件時,OpenEJB備用描述符無法正常工作
一些代碼更好地解釋它。被測豆類像
@Stateless
@Local(A.class)
public class ABean implements A {
// Bean implementation, no dependencies
}
@Stateless
@Local(B.class)
public class BBean implements B {
@EJB
A aBean; // Dependency to ABean
// Rest of the implementation
}
和測試用例的B(測試用例對於A類似,只是它不設置該屬性使用備用描述符)
public class BBeanTest {
private B bean;
@Before
public void bootContainer() throws Exception {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
props.put("openejb.altdd.prefix", "test"); // Use stubs
System.out.println("boot B: " + props);
context = new InitialContext(props);
bean = (B) context.lookup("BBeanLocal");
}
}
正如所說,這一切工作當單獨執行時很好。備用描述符注入A接口的存根實現。
使用以下測試套件時,事情開始崩潰。
@RunWith(Suite.class)
@Suite.SuiteClasses({
ABeanTest.class,
BBeanTest.class
})
public class MySuite {
// Empty on purpose, annotations do the trick
}
運行此套件時,測試B的備用描述符未被使用。雖然,輸出表明至少該屬性的每個測試
boot A: {java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory}
boot A: {java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory}
boot A: {java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory}
boot B: {java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory, openejb.altdd.prefix=test}
boot B: {java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory, openejb.altdd.prefix=test}
之前如果我扭轉加載試驗套件的順序設置,即前ABeanTest.class添加BBeanTest.class,它會使用備用描述符。由於ABean沒有依賴關係,在這種情況下,這可以很好地工作,但可能會導致使用多個備用描述符進行更大設置時出現問題。
任何指針?
在此先感謝。
編輯根據日誌輸出,容器實際上僅在第一次測試中啓動一次,因爲它大約需要一次。 2,5秒執行,而其他人需要大約0,001秒。
EDIT2 OpenEJB的版本是的Apache OpenEJB的3.1.4版本:20101112-03:32
設法做什麼,我需要batchtest的JUnit Ant任務的幫助。在可以通過包名來區分'套件'的情況下很好地工作。它仍然需要知道是否可以在OpenEJB中使用jUnit TestSuite,以便在需要時創建更復雜的套件。 – kaskelotti