看看这个Unit Testing Struts 2.0 (Part 2)
http://fassisrosa.blogspot.com/2007/03/unit-testing-struts-20-part-2.html

解决方案 »

  1.   

    我的Struts 版本是 2.0.11
      

  2.   

    sruts2的源代码包中有很多这样的测试用例
      

  3.   

    有这句话好像就没法测了吧
    Account account = (Account)this.request.getSession().getAttribute("account");
    要想用Junit测试,你的代码必须和服务器先脱离
    先想办法,让你的程序在main方法里能跑吧struts2都把你要的东西封装在map里了,你为什么还一定要用request啊
      

  4.   

    我继承SessionAware后,只要创建一个Map就可以单元测试该类,且脱离了容器。达到了我的要求。
      

  5.   

    http://www.blogjava.net/max/archive/2006/10/10/74353.html
    这篇文章的后半部分有关于junit测试action的
      

  6.   

    Java code
       ActionContext actionContext = ActionContext.getContext(); 
       Map session = actionContext.getSession(); 我这里是不是要继承SessionAware接口,那样的话,利用Map就隔离容器了。具体我还没做... 
      

  7.   

    这里有一种方法:比如:
       @Test
        public void testGetAllResult() throws Exception {
            System.out.println("getAllResult--------------");
            ApplicationContext factory = new FileSystemXmlApplicationContext("web/WEB-INF/applicationContext.xml");
            IPersonService dao = (IPersonService) factory.getBean("iPersonService");        
            CombiSearchAction instance = new CombiSearchAction();
            instance.setiPersonService(dao);
            List<Hashtable> result = instance.getAllResult();
            for (int i = 0; i <result.size(); i++) {
                System.out.println(result.get(i).get("uid"));
            }
        }与大家共享,这种方式不需要添加另外任何的jar包。
      

  8.   

    org.springframework.mock.web 包有一组Servlet API 的很详尽的mock对象,主要面向Spring Web MVC 框架,能方便的测试web上下文和控制器。这些mock对象通常比使用动态mock对象更方便(例如 EasyMock) 或已有的Servlet API mock对象(如 MockObjects).
      

  9.   

    跟容器相关的测试应该做两种,一种是IC(In Container)测试,一种是OOC(Out of Container)测试,IC测试就的实现应该跟你的功能的实现是一样的,只不过加入assert判断结果是不是正确。
    OOC测试要用到Mock工具,Java常用的是EasyMock
    这是个EasyMock的小例子public class YourActionTest { private YourAction action;
    @Before public void setUp() { super.setUp(); action = new YourAction();
                    //设置action的类变量
    action.setXXXXXX(financeFacade); session.setAttribute("cachedAccount", accountTO); }
    @Test public void testMethod1() { action.method1("2"); Assert.assertEquals(NONE, action.method1("2");
                 ); }}