【发布时间】:2013-03-15 17:36:53
【问题描述】:
我将 SessionContext 作为资源注入到 EJB(实现容器管理事务):
@Stateless(name = "XXX", mappedName = "PPP-MMM-CCC")
@TransactionManagement(value=TransactionManagementType.CONTAINER)
public class Xxx implements ItsRemoteInterface {
@Resource
private SessionContext sctx;
....
}
我的单元测试失败,因为“sctx”在运行时为空 (NullPointerException)。所以我想解决这个问题的唯一方法是创建一个实现 SessionContext 的 FakeSessionContext 类,然后我可以在测试期间使用它。
instance = new Xxx();
sessionContextResourceField = Xxx.class.getDeclaredField("sctx");
sessionContextResourceField.setAccessible(true);
sessionContextResourceField.set(instance, new FakeInitialContext());
但在我这样做之前,我想知道是否有更优雅的方式?除了创建 FakeSessionContext 类之外?类似于工厂类的东西?
如果有兴趣,我使用的是 jUnit 4.10 和 jmockit 0.999.15。
【问题讨论】:
-
是的。使用您的模拟框架并要求它为您创建一个虚假的会话上下文。
标签: java junit dependency-injection ejb-3.0 sessioncontext