我有一个包含太多方法的Web服务,之前我用soap手动“测试它”,但现在我想用Junit和其他框架来与数据库进行交互并使用@EJB注释。 我发现的第一个例子是使用DBunit,因此我连接到数据库并在表中放入一行(并且它可以工作)。但是当我尝试重用这个连接,并尝试直接调用我的@Stateless方法时,我在EJB或实体管理器上有太多错误,例如NullPointer异常,所以我尝试了一个complet不同的逻辑并使用Mockito,如下所示: / p>
public class ReportBeanTest {
//This is my Stateless class
private ReportFc reportBean = new ReportFc();
@Before
public void injectMockEntityManager() throws Exception {
EntityManager entityManager = mock(EntityManager.class);
reportBean.emReport = entityManager;
DateFc dateF= mock(DateFc.class);
reportBean.dateF =dateF;
QuerysFc queryF= mock(QuerysFc .class);
reportBean.queryF =queryF;
reportBean.getReport("myReportA", new Date(), new Date());
}
}
这是我的ReportFc.java:
@Stateless
public class ReportFc {
@PersistenceContext(unitName="myDb")
public
EntityManager emReport;
@EJB
public
DateFc dateF;
@EJB
public
QuerysFc queryF;
public List<MyList> getReport(String myReport,
Date from_date,
Date to_date
) throws WSException {
try{
List<WsMap_v3> resultList = new LinkedList<WsMap_v3>();
Date start= dataF.parserDateFormat(from_date,0,"noTime");
Date end= dataF.parserDateFormat(to_date,0,"noTime");
dateF.verifyTimeInterval(start,end);
Query qC=queryF.queryGetReportBetweenDate(start, end, myReportA);
...///
}
我看到每个使用外部EJB的变量都是null,就像我的情况一样: 日期开始,日期结束,查询qC等等......我做错了什么?还有其他方法可以测试使用EJB或entitymanager的这个函数吗? 我正在使用maven所以如果有其他框架可以使用我没有问题导入它。 其他的事情:我的db的所有bean都在jar中,我用maven dependecy导入