刚使用easy  mock  其中有一个次数的方法设置,  
代码如下:  
public  void  testAddAndChangeDocument()  
 {  
               mock.documentAdded("Document");                  
               mock.documentChanged("Document");                  
               expectLastCall().times(3);                
               replay(mock);                
               classUnderTest.addDocument("Document",  new  byte[0]);                
               classUnderTest.addDocument("Document",  new  byte[0]);                  
               classUnderTest.addDocument("Document",  new  byte[0]);                  
               classUnderTest.addDocument("Document",  new  byte[0]);                  
               verify(mock);        
 }  
不太明白设置expectLastCall().times(3);      有什么用,请高手指点 2、在spring+hibernate中测试service有什么意义呢?就是为了看看他用到的dao是否执行了对应的方法吗?3、
我就是想不明白,我看了easy  mock的一些资料,测试service大致分如下步骤:  
1、构造一个正确的结果对象或变量。  
2、调用一个dao接口,执行一个方法(假设接口还没有被实现,只是模拟执行一下方法)  
3、返回1中构造的正确结果,然后运行service中的对应方法(方法中调用2中提到的dao的方法)  
4、最后,进行断言判断,这有什么意义啊!返回的对象肯定是正确的,有什么好判断的啊!4、我这里有一个service中的方法getGroupOfUserList,如果对这个方法进行测试的话,应该如何使用easymock。public UserPeer getSingleUser(String loginName)
{ UserPeer user = (UserPeer) userDao.find(UserPeer.class, loginName); return user;
}public Integer[] getGroupOfUserList(String loginName)
{
UserPeer user = getSingleUser(loginName); Set groupUserSet = user.getGroupUserSet(); List groupUser = new ArrayList(); Iterator it = groupUserSet.iterator(); while (it.hasNext())
{
GroupUserPeer gup = (GroupUserPeer) it.next(); GroupUserKey key = gup.getId(); GroupPeer group = key.getGroups(); groupUser.add(group);
} Integer[] groupIds = new Integer[groupUser.size()]; for (int i = 0; i < groupUser.size(); i++)
{
groupIds[i] = ((GroupPeer) groupUser.get(i)).getGroupId();
} return groupIds;
}

解决方案 »

  1.   

    expectLastCall().times(3)指定最后一次调用的次数对于service层的测试,如果service仅仅是调用dao,没有其他业务逻辑,我是不进行的测试的,
    而仅仅是测试DAO。而其实大部分的应用都没有什么业务逻辑,一般的crud的操作测试DAO即可
      

  2.   

    killme2008(www.rubyeye.net)可不可以这样理解,如果mock.documentChanged();  这个方法每次调用删除的对象不一样,比如是这样
    mock.documentChanged("document1");
    mock.documentChanged("document2");
    mock.documentChanged("document3");
    那么是不是就不能有expectLastCall().times()这个设置了?第二:我现在虽然也写了一些service测试,虽然每次运行能通过,但是总感觉不太对,比如有些地方就不明白,如果被测试的代码中有什么for循环或者if-else的话,那么我的测试代码中应该怎么写啊。第三:在测试一个service方法时,这个service方法里调用了对应的dao的方法,当然还有其他的逻辑,我发现,我每次不处理这个dao,也没有出错:例如下面
    public void testRemoveParamList()
    {
    ReportParamPeer rpp=new ReportParamPeer();

    rpp.setParamId(1);

    ReportParamPeer rpp1=new ReportParamPeer();

    rpp1.setParamId(2);

    List rppList=new ArrayList();

    rppList.add(rpp);

    rppList.add(rpp1);

    TaskPeer task=new TaskPeer();

    task.setTaskId(1);

    task.setSysParam("1");

    TaskPeer task2=new TaskPeer();

    task2.setTaskId(2);

    task2.setSysParam("2");

    List taskList=new ArrayList();

    taskList.add(task);

    taskList.add(task2);

    /*mockSchedulerDao.updateObject(task);

    mockSchedulerDao.updateObject(task2);

    EasyMock.replay(mockSchedulerDao);

    schedulerService.updateTask(task);

    schedulerService.updateTask(task2);

    EasyMock.verify(mockSchedulerDao);

    mockUserDao.remove(rpp);

    mockUserDao.remove(rpp1);

    EasyMock.replay(mockUserDao);*/

    userService.removeParamList(rppList,taskList,schedulerService);

    //EasyMock.verify(mockUserDao);
    }
    这是我写的一个测试,我把dao都屏蔽了,仍然没错,我一直以为会抛出预期方法未执行的异常,这是什么道理?请赐教