再次提问,关于easymock 测试!请高手如内……

tosswang2006 2007-08-23 11:30:31
刚使用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;
}
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaiCiRose 2011-05-19
  • 打赏
  • 举报
回复
我是连接了数据库进行的测试,我是通过用户的编号来查询用户的姓名,测试这个难道不行吗??我怎么总是报错啊!!请各位大侠帮帮忙!O(∩_∩)O~
tosswang2006 2007-08-24
  • 打赏
  • 举报
回复
up
killme2008 2007-08-23
  • 打赏
  • 举报
回复
expectLastCall().times(3)指定最后一次调用的次数

对于service层的测试,如果service仅仅是调用dao,没有其他业务逻辑,我是不进行的测试的,
而仅仅是测试DAO。而其实大部分的应用都没有什么业务逻辑,一般的crud的操作测试DAO即可
tosswang2006 2007-08-23
  • 打赏
  • 举报
回复
up
tosswang2006 2007-08-23
  • 打赏
  • 举报
回复
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都屏蔽了,仍然没错,我一直以为会抛出预期方法未执行的异常,这是什么道理?请赐教

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧