SessionContextをリソースとしてEJBに注入しています(コンテナー管理トランザクションを実装しています):
@Stateless(name = "XXX", mappedName = "PPP-MMM-CCC")
@TransactionManagement(value=TransactionManagementType.CONTAINER)
public class Xxx implements ItsRemoteInterface {
@Resource
private SessionContext sctx;
....
}
実行中の「sctx」がnullであるため、ユニットテストが失敗します(NullPointerException)。したがって、これを修正するために私が考えた唯一の方法は、SessionContextを実装するFakeSessionContextクラスを作成することです。これは、テスト中に使用できます。
instance = new Xxx();
sessionContextResourceField = Xxx.class.getDeclaredField("sctx");
sessionContextResourceField.setAccessible(true);
sessionContextResourceField.set(instance, new FakeInitialContext());
しかし、それをする前に、もっとエレガントな方法があるのだろうかと思っていました。FakeSessionContextクラスを作成する以外に?ファクトリクラスのようなものですか?
興味のある方のために、私はjUnit4.10とjmockit0.999.15を使用しています。