关于在SSH框架中使用Junit进行单元测试的问题

最近要做一个使用SSH框架的项目,要用到Junit进行单元测试.我想问下,在一个MemberAddAction中假如是进行添加成员的,其中action中用到DAO里的addmember方法,网上说测试Struts用StrutsTestCast框架,但这里怎么测试这个MemberAddAction....里面还有一个addmember(),我怎么测试这个addmember是否已经添加了一天记录?
能说详细点吗?
我的意思是....在测试action的时候要不要再测试这个addmember方法,看它有没有添加到这个member..或者只是按照tomiscat2009 所测试的,而不用测试里面的其他方法

第1个回答  2009-05-14
1、测试dao可以用Junit,写测试类DaoTest继承TestCase,测试方法的声明一般是这样的:public void testAdd(){},测试方法里,dao的c、r、u、d操作都可以测试。如果用spring来注入dao的话,示例代码如下:

public class DaoTest extends TestCase {
//读spring配置文件
public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");

public void testSave() {
//不用spring注入的话就自己new一个dao出来
xxDao dao1 = (xxDao)factory.getBean("xxDao");
dao1.save(xx);
//dao1.get(xx);dao1.update(xx);dao1.delete(xx); - c、r、u、d操作
}
}

此时,在eclipse里就可以选中方法名,右键 -> run as -> junit test了

2、用StrtusTest的话可以参考下面这篇文章,作者xunmengren :

StrtusTest是junit的扩展当前的版本是StrutsTest2.1.0,在这个版本中不支持Struts1.0。如果需要测试struts1.0的应用程序,对应的版本是StrutsTest2.0。可以从http://sourceforge.net/projects/strutstestcase/下载。

下面介绍一下它的使用。直接把解压的下载文件保存到项目的classpath中,然后再引入这两个jar文件,就可以使用了。

右击项目中任何一个文件夹,选择news的others,这时就会出现Junit的文件夹,展开文件夹选择JUnit Test Case ,点击下一步,在Name中填写测试程序的名字,一般名字必须以Test结尾。然后构选setup()和teardown()选项,选择需要测试的Action,点击下一步,选择需要测试的方法,点击Finish即可自动生成测试文件。测试文件中自动生成了setup()和teardown()方法,用来在测试方法执行前初始化测试环境和在执行后撤销测试环境。测试方法都是以test开头的,如(testDoExecute()).

下面在测试方法中就可以填写自己需要的东西了。如下面的例子:

package com.ezcross.SMS.common.struts.action;

import servletunit.struts.MockStrutsTestCase;

/**//**

* @author paul.ping([email protected])

*

* 类名:SMS10Test

* 操作:

*/

public class LoginActionTest extends MockStrutsTestCase {

/**//*

* @see TestCase#setUp()

*/

protected void setUp() throws Exception {

super.setUp();

}

/**//*

* @see TestCase#tearDown()

*/

protected void tearDown() throws Exception {

super.tearDown();

}

public void testDoExecute() {

try

{

addRequestParameter("user_name","cka");

addRequestParameter("passward","111111");

setRequestPathInfo("/login");

System.out.println("hava completed adding data");

actionPerform();

System.out.println("begin verify");

verifyForward("dologin");

verifyForwardPath("/Login.jsp");

verifyNoActionErrors();

System.out.println("end verify");

//assertNotNull(testObject.doExecute(null,null,null,null,null));

}

catch (Exception ee)

{

System.out.println(ee.toString());

}

}

}

填写完程序后,右击程序,选择run下的JUnit Test进行运行,如果没有错误的话则显示绿色 ,否则显示红色。

对程序的说明:

主要函数和作用:

- setContextDirectory,设置web应用的根

- setRequestPathInfo,设置request的请求

- addRequestParameter,将参数和对应的值加入request中

- actionPerform,执行这个请求

- verifyForward,验证forward的名字是否正确

- verifyForwardPath,验证forward的path是否正确

- verifyNoActionErrors,验证在action执行过程中没有ActionError产生

- verifyActionErrors,验证在action执行过程中产生的ActionError集合的内容

具体详细的内容请参见对应的javaDoc。