Java NullPointerException,集成测试ejb
我有一个包含太多方法的web服务,以前我用soap手动“测试”,但现在我想用Junit和其他框架与数据库交互并使用@EJB注释。 我发现的第一个示例是使用DBunit,因此我连接到数据库并将一行放入表中(它可以工作)。但是,当我尝试重用此连接,并尝试直接调用@Stateless方法时,我在EJB或实体管理器上遇到了太多错误,例如NullPointer异常,因此我尝试了完全不同的逻辑并使用Mockito,如下所示:Java NullPointerException,集成测试ejb,java,maven,junit,mockito,dbunit,Java,Maven,Junit,Mockito,Dbunit,我有一个包含太多方法的web服务,以前我用soap手动“测试”,但现在我想用Junit和其他框架与数据库交互并使用@EJB注释。 我发现的第一个示例是使用DBunit,因此我连接到数据库并将一行放入表中(它可以工作)。但是,当我尝试重用此连接,并尝试直接调用@Stateless方法时,我在EJB或实体管理器上遇到了太多错误,例如NullPointer异常,因此我尝试了完全不同的逻辑并使用Mockito,如下所示: public class ReportBeanTest { //This
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);
...///
}
@无状态
公共类报告{
@PersistenceContext(unitName=“myDb”)
公众的
实体管理者报告;
@EJB
公众的
DateFc dateF;
@EJB
公众的
QuerysFc queryF;
公共列表getReport(字符串myReport,
自(u)日起,,
截止日期
)抛出WSException{
试一试{
List resultList=新建LinkedList();
日期开始=dataF.parserDateFormat(从日期开始,0,“noTime”);
日期结束=dataF.parserDateFormat(截止日期,0,“noTime”);
日期f.验证时间间隔(开始、结束);
Query qC=queryF.queryGetReportBetweenDate(开始、结束、myReportA);
...///
}
我已经看到使用外部EJB的每个变量都是空的,就像我的例子:
日期开始、日期结束、查询qC等等……我做错了什么?还有其他方法可以使用EJB或entitymanager来测试这个函数吗?
我使用的是maven,所以如果有其他框架可以使用,那么导入它就没有问题。
另一件事:我的db的所有bean都在jar中,我用maven dependecy导入它我认为这里值得一看:除此之外,如果你正在编写集成测试,你应该看看maven failsafe插件,并相应地将测试命名为
*it.java
…这是maven failsafe插件的默认名称。@khmarbaise可以你能给我链接一个maven failsafe插件集成测试的例子吗?