Java NullPointerException,集成测试ejb

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

我有一个包含太多方法的web服务,以前我用soap手动“测试”,但现在我想用Junit和其他框架与数据库交互并使用@EJB注释。 我发现的第一个示例是使用DBunit,因此我连接到数据库并将一行放入表中(它可以工作)。但是,当我尝试重用此连接,并尝试直接调用@Stateless方法时,我在EJB或实体管理器上遇到了太多错误,例如NullPointer异常,因此我尝试了完全不同的逻辑并使用Mockito,如下所示:

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插件集成测试的例子吗?