浏览 4224 次
锁定老帖子 主题:关于WebWork2中Action的测试
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-04-17
如下面这个例子 (注:其中Interceptor"permission","LoginInterceptor","component-autowire"都借鉴了Jert中的实现) public class BaseUploadList extends BaseAction implements Action, Protected { private static final long serialVersionUID = 200504170251L; protected PermissionsManager permissionsManager; public PermissionsManager getPermissionsManager(); { return permissionsManager; } public void setPermissionsManager(PermissionsManager permissionsManager); { this.permissionsManager = permissionsManager; } public String execute(); throws Exception { return SUCCESS; } public boolean hasPermission(); { User user = (User);ActionContext.getContext();.getSession();.get(LoginInterceptor.USER_LOGIN);; Permissions perms = permissionsManager.getFinalUserPerm(user.getId(););; return perms.hasPermission(Permissions.UPLOAD_LIST);; } } Action配置文件相关内容: ..... <package name="list" extends="default" namespace="/list"> <action name="viewUploadList" class="....action.list.BaseUploadList"> <interceptor-ref name="login"/> <interceptor-ref name="component-autowire"/> <interceptor-ref name="params"/> <interceptor-ref name="permission"/> <result name="success">/list/uploadList.action</result> <result name="nopermission">/nopermission.jsp</result> </action> ..... </package> ....... 调用这个Action时会验证用户是否有权限进入UploadList页面,因此对这个Action进行测试需要判断两种情况:有或没有权限。 下面是我的两种测试方法,测试都已经通过: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-04-17
一。不脱离Action配置文件的测试:
public class TestBaseUploadList extends TestCase { public void testExecuteSuccess(); throws Exception { Map session = new HashMap();; User user = new UserImpl();; user.setId(1L);; session.put(LoginInterceptor.USER_LOGIN, user);; Map params = new HashMap();; params.put("permissionsManager", new MockPermissionsManager(););; Map extraContext = new HashMap();; extraContext.put(ActionContext.SESSION, session);; extraContext.put(ActionContext.PARAMETERS, params);; ActionProxy proxy = ActionProxyFactory.getFactory();.createActionProxy( "/list", "viewUploadList", extraContext, false);; assertEquals(proxy.execute();, "success");; } public void testExecuteNoPerms(); throws Exception { Map session = new HashMap();; User user = new UserImpl();; user.setId(0L);; session.put(LoginInterceptor.USER_LOGIN, user);; Map params = new HashMap();; params.put("permissionsManager", new MockPermissionsManager(););; Map extraContext = new HashMap();; extraContext.put(ActionContext.SESSION, session);; extraContext.put(ActionContext.PARAMETERS, params);; ActionProxy proxy = ActionProxyFactory.getFactory();.createActionProxy( "/list", "viewUploadList", extraContext, false);; assertEquals(proxy.execute();, "nopermission");; } private class MockPermissionsManager implements PermissionsManager { public Permissions getFinalUserPerm(long userID); { return (userID == 1); ? new Permissions(Permissions.UPLOAD_LIST); : new Permissions(0L);; } ....... } } 为了使这个测试能通过,要对Jert中的Interceptor"component-autowire"做一些小小的改变: public class ComponentAutowireInterceptor implements Interceptor { ............ public String intercept(ActionInvocation invocation); throws Exception { //Jert原来的实现: //Application.getInstance();.getContainer();.autowireComponent(invocation.getAction(););; if (Application.getInstance();.getContainer(); != null); Application.getInstance();.getContainer();.autowireComponent(invocation.getAction(););; return invocation.invoke();; } } |
|
返回顶楼 | |
发表时间:2005-04-17
二。脱离Action配件文件的测试:
public class TestBaseUploadListA extends TestCase { public void testHasPermission(); throws Exception { Map session = new HashMap();; User user = new UserImpl();; user.setId(1L);; session.put(LoginInterceptor.USER_LOGIN, user);; ActionContext.getContext();.setSession(session);; BaseUploadList action = new BaseUploadList();; action.setPermissionsManager(new MockPermissionsManager(););; assertTrue(action.hasPermission(););; } public void testNoPermission(); throws Exception { Map session = new HashMap();; User user = new UserImpl();; user.setId(0L);; session.put(LoginInterceptor.USER_LOGIN, user);; ActionContext.getContext();.setSession(session);; BaseUploadList action = new BaseUploadList();; action.setPermissionsManager(new MockPermissionsManager(););; assertFalse(action.hasPermission(););; } private class MockPermissionsManager implements PermissionsManager { public Permissions getFinalUserPerm(long userID); { return (userID == 1); ? new Permissions(Permissions.UPLOAD_LIST); : new Permissions(0L);; } .......... } } |
|
返回顶楼 | |
发表时间:2005-04-17
偶的建议是不测试,WebWork的action测试已经接近于集成测试和用户接受度测试,用junit来对action进行测试吃力不讨好。
有空测试action,还不如多写一些代码达到service/manager更多的测试覆盖率。 |
|
返回顶楼 | |
发表时间:2005-04-17
如果WebWork的action测试放到集成测试中的话,那我觉得
用Interceptor"component-autowire"为action注入各种service/manager是不是也是有些多余的,因为我原来是直接通过getBean的方式在action中获取各种service/manager,但后来考虑到要对action进行细粒度级的单元测试,才把它改成通过setter方法来注入的,因为这样我就不必考虑各种service/manager的具体实现,我只要先写一个mock Object就可以先对我的action进行测试,而没必要等到集成测试的时候。 |
|
返回顶楼 | |
发表时间:2005-08-23
引用 偶的建议是不测试,WebWork的action测试已经接近于集成测试和用户接受度测试,用junit来对action进行测试吃力不讨好。
有空测试action,还不如多写一些代码达到service/manager更多的测试覆盖率。 同意这个说法。 |
|
返回顶楼 | |