Inheritance JEE:将注入的属性替换为单元测试的模拟,在容器外部
我有一个要测试的EJB。我正在为JBossEAP6.4编写代码,但我想进行单元测试。EJB(SendMessageTimer)继承自另一个类(ResettableTimer),该类有一个注入@EJB(也尝试了@Resource)的TimerService(理论上由EAP提供)。 我发现:这大致就是我想要做的,但easygloss似乎已经死了——我看不到任何下载,已经6年没有更新了。我从这个开始,它做了一些类似的事情,但是使用了数据源,所以看起来它应该是可能的: 我在TimerService调用时得到一个空指针。我认为这是因为sendTimer是独立创建的,而不是由ic上下文初始化的。另一件事可能是我在哈希表中对初始上下文使用了错误的属性。似乎有很多不同的,但我不确定有什么不同。我想知道的是,有没有可能从上下文中创建sendTimer(它可能会在上下文中注入TimerService),而不是绑定一个已创建的sendTimer;这样做有意义吗?我是否应该放弃这种方法,转而使用一个测试框架,如果有的话,还有什么建议吗? 提前谢谢你能给我的任何帮助Inheritance JEE:将注入的属性替换为单元测试的模拟,在容器外部,inheritance,junit,dependency-injection,jboss6.x,Inheritance,Junit,Dependency Injection,Jboss6.x,我有一个要测试的EJB。我正在为JBossEAP6.4编写代码,但我想进行单元测试。EJB(SendMessageTimer)继承自另一个类(ResettableTimer),该类有一个注入@EJB(也尝试了@Resource)的TimerService(理论上由EAP提供)。 我发现:这大致就是我想要做的,但easygloss似乎已经死了——我看不到任何下载,已经6年没有更新了。我从这个开始,它做了一些类似的事情,但是使用了数据源,所以看起来它应该是可能的: 我在TimerService调用时
public abstract class parentTimer {
@EJB
private static TimerService timerService;
Timer resettableTimer = null;
public void reset(){
//Nullpointer here!
resettableTimer = timerService.createTimer(timeout, getName());
}
@Timeout
public abstract void doTimerActions() throws Exception;
}
@EJB
public class SendTimer extends ResetableTimer {
public SendTimer() {}
@Override
@Timeout
public void doTimerActions() throws IOException, JMSException {
this.reset()
}
}
public class SendTimerTest {
private static InitialContext ic;
@BeforeClass
public static void setUpClass() throws Exception {
ic = createInitialContext();
makeAllSubcontexts(ic, "java:/javax/ejb");
TimerService mockTimerService = Mockito.mock(TimerService.class);
Timer mockTimer = Mockito.mock(Timer.class);
Mockito.when(mockTimerService.createTimer(Mockito.anyLong(), Mockito.any(String.class))).thenReturn(mockTimer);
ic.bind("java:/javax/ejb/TimerService", mockTimerService);
}
private static InitialContext createInitialContext() throws NamingException {
if (ic != null) {
return ic;
}
// Create initial context
Hashtable ht = new Hashtable();
ht.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
ht.put(InitialContext.URL_PKG_PREFIXES, "org.apache.naming");
ic = new InitialContext(ht);
return ic;
}
@Test
public void testDoAcTimerActions() {
TimerService service = (TimerService) ic.lookup("java:/javax/ejb/TimerService");
//This context is created successfully because the assert here passes
assertNotNull(service);
makeAllSubcontexts(ic, "java:/my/timers/package");
SendTimer sendTimer = new SendTimer();
sendTimer.setTimerService(service);
sendTimer.reset();
ic.bind("java:/my/timers/package/SendTimer", sendTimer);
SendTimer timer = (SendTimer) ic.lookup("java:/my/timers/package/SendTimer");
assertNotNull(timer);
timer.doTimerActions(); //Nullpointer from parentTimer
}