浏览 1926 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
于是,把以前的项目改了下,开始我的第一个测试,不幸的是。。。偶失败了 ![]() 问题很菜,恳请师兄们帮俺看看,不必留情,谢谢咯~ 我的目的是测试Service的内部逻辑,因此,把DAO MOCK。以下是代码: SERVICE接口: package com.vale.esales.service; import com.vale.esales.dao.IPrivilegedDao; import com.vale.esales.domain.TbSysRole; public interface IPrivilegedService { boolean addNewRole(TbSysRole role, int[] functions); void setPrivilegedDao(IPrivilegedDao privilegedDao); } SERVICE实现: package com.vale.esales.service.impl; import com.vale.esales.constants.PrivilegedProperties; import com.vale.esales.dao.IPrivilegedDao; import com.vale.esales.domain.TbSysFunctionItem; import com.vale.esales.domain.TbSysRole; import com.vale.esales.domain.TbSysRoleFunctionRelation; import com.vale.esales.exception.RoleSettingException; import com.vale.esales.service.IPrivilegedService; public class PrivilegedService implements IPrivilegedService { private IPrivilegedDao privilegedDao; public void setPrivilegedDao(IPrivilegedDao privilegedDao) { // TODO Auto-generated method stub this.privilegedDao = privilegedDao; } public boolean addNewRole(TbSysRole role, int[] functions) { // TODO Auto-generated method stub role.setStatus(PrivilegedProperties.ROLE_AVALIABLE); boolean result = false; if (functions != null) { for (int itemId : functions) { // 这里测试是没有问题的 TbSysFunctionItem funItem = privilegedDao .londFunctionItem(itemId); if (funItem.getUserModelId().intValue() != role .getUserModelId().intValue()) { throw new RoleSettingException( "角色创建失败! Cause: 角色与其所包含的功能必须同属于一个用户模块!"); } TbSysRoleFunctionRelation relation = new TbSysRoleFunctionRelation(); relation.setTbSysFunctionItem(funItem); relation.setTbSysRole(role); // 就是这里不知道在TEST里该怎么写 privilegedDao.saveNewRole(relation); if (!result) result = true; } } return (result); } } DAO接口: package com.vale.esales.dao; import com.vale.esales.domain.TbSysFunctionItem; import com.vale.esales.domain.TbSysRoleFunctionRelation; public interface IPrivilegedDao { /** * 根据功能ID加载Function实体, 通常用作关联使用. * * @param itemId * 功能ID * @return */ public TbSysFunctionItem londFunctionItem(int itemId); /** * 保存一个新的角色. * * @param role * 由中间关联对象保存 */ public void saveNewRole(TbSysRoleFunctionRelation obj); } DAO实现: package com.vale.esales.dao.impl; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.vale.esales.dao.IPrivilegedDao; import com.vale.esales.domain.TbSysFunctionItem; import com.vale.esales.domain.TbSysRoleFunctionRelation; public class PrivilegedDao extends HibernateDaoSupport implements IPrivilegedDao { public TbSysFunctionItem londFunctionItem(int itemId) { // TODO Auto-generated method stub return ((TbSysFunctionItem) getSessionFactory().getCurrentSession() .load(TbSysFunctionItem.class, itemId)); } public void saveNewRole(TbSysRoleFunctionRelation obj) { // TODO Auto-generated method stub getSessionFactory().getCurrentSession().save(obj); } } TEST: package com.vale.esales.testcase.service; import static org.easymock.EasyMock.*; import com.vale.esales.constants.UserProperties; import com.vale.esales.dao.IPrivilegedDao; import com.vale.esales.domain.TbSysFunctionItem; import com.vale.esales.domain.TbSysRole; import com.vale.esales.domain.TbSysRoleFunctionRelation; import com.vale.esales.service.IPrivilegedService; import com.vale.esales.service.impl.PrivilegedService; import junit.framework.TestCase; public class TestPrivilegedService extends TestCase { private IPrivilegedDao privilegedDao; private IPrivilegedService privilegedService; protected void setUp() { privilegedDao = createMock(IPrivilegedDao.class); privilegedService = new PrivilegedService(); privilegedService.setPrivilegedDao(privilegedDao); } protected void tearDown() { verify(privilegedDao); } public void testAddNewRoleOk() throws Exception { TbSysRole role = new TbSysRole(); role.setName("总公司角色1"); role.setDescription("TestCase创建!"); role.setUserModelId(UserProperties.TYPE_COMPANY); int[] functions = { 6101, 6601, 6104, 6112 }; for (int i : functions) { // 因为在SERVICE里,只需要用到FunctionItem的UserModel属性,没必要模拟所有的数据,所以这里调用构造器,只设置UserModel expect(privilegedDao.londFunctionItem(i)).andReturn( new TbSysFunctionItem(null, UserProperties.TYPE_COMPANY)); TbSysRoleFunctionRelation role_function = new TbSysRoleFunctionRelation(); role_function.setTbSysRole(role); role_function.setTbSysFunctionItem(new TbSysFunctionItem(null, UserProperties.TYPE_COMPANY)); // 就是这里测试保存时不成功,如果把以下两行代码屏蔽,同时,把Service里的privilegedDao.saveNewRole(relation)也屏蔽掉,那么,测试通过。 privilegedDao.saveNewRole(role_function); expectLastCall(); } replay(privilegedDao); assertTrue(privilegedService.addNewRole(role, functions)); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-10
貌似是引用不一样,所以出错,这种在SERVICE里创建新对象的逻辑,该如何测呢?郁闷
|
|
返回顶楼 | |