我注射SessionContext作爲一種資源的EJB(實施容器管理的事務):模擬注入SessionContext
@Stateless(name = "XXX", mappedName = "PPP-MMM-CCC")
@TransactionManagement(value=TransactionManagementType.CONTAINER)
public class Xxx implements ItsRemoteInterface {
@Resource
private SessionContext sctx;
....
}
我的單元測試失敗,因爲「sctx」,而他們正在運行爲空(NullPointerException異常)。所以我唯一想辦法解決這個問題的方法是創建一個FakeSessionContext類,它實現了SessionContext,然後我可以在測試中使用它。
instance = new Xxx();
sessionContextResourceField = Xxx.class.getDeclaredField("sctx");
sessionContextResourceField.setAccessible(true);
sessionContextResourceField.set(instance, new FakeInitialContext());
但在此之前,我想知道是否有更優雅的方式?除了創建一個FakeSessionContext類嗎?像工廠類的東西?
如果有興趣,我使用jUnit 4.10和jmockit 0.999.15。
是的。使用你的模擬框架,並要求它爲你創建一個假會話上下文。 – 2013-03-26 08:05:00