单元测试基础
最早我们项目组开发的项目时,写代码都是从底层一直写到表现层到jsp,然后开发人员在web层调试页面,近乎98%都会报一大堆exception,然后再在代码中加断点一步一步查到底哪一层代码出现问题……,比较好点做法就是在各个类中加上main方法测试,但总体很不理想,给web层开发人员的调试和质量控制人员带来繁重的工作压力;使用单元测试后,针对每一个方法都做严格的把关,大大减少调试的时间;同时质量控制人员返回过来的bug少了近60%,现在对于开发人员写测试用例非常熟练,并且本人根据实际情况对测试用例做了点小小改动(这部分主要在后面代码中详述),带来很好的效果!
单元测试到底给实际开发带来什么好处那?
(2) (2) 对于整个项目来说,有了完整的测试,保证项目最后交付测试有了可靠依据;
(4) (4)对于项目经理整个项目达到很好的可控;
(5) (5)最主要的完整的单元测试给后期维护人员带来很大的便捷!
单元测试好处可能还有很多,但本人只能理解和感悟这么多,希望观者补充!
单元测试配置:
使用eclipse快速开发test Case:
如下图:右键选择你要测试的类,在新建中点击“JUnit 测试用例”,
弹出对话框,配置测试名称和根目录,添加注释等,再点击“下一步”到下图:
选择你要测试类中的方法,点击完成!便生成测试类的基本框架,如下代码,我们以对一个DAO类测试为例:
/**//*
* Copyright reserved 2005 by XXXXCo. Ltd.
* Author:Fu wei Date:2006-9-4
*/
import junit.framework.TestCase;
/** *//**
* @author Fu wei
*/
public class OrgTypeDAOTest extends TestCase ...{
/** *//**
* @param arg0
*/
public OrgTypeDAOTest(String arg0) ...{
super(arg0);
}
/**//*
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception ...{
super.setUp();
}
/**//*
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception ...{
super.tearDown();
}
/** *//**
* 主函数
* @param args
*/
public static void main(String[] args)...{
TestRunner.run(OrgTypeDAOTest .class);
}
/** *//**
* {@link OrgTypeDAO#getOrgTypeList()} 的测试方法。
*/
public final void testGetOrgTypeList() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testInsertOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)} 的测试方法。
*/
public final void testDeleteOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testUpdateOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#getOrgTypeInfoById(java.lang.String)} 的测试方法。
*/
public final void testGetOrgTypeInfoById() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#isRepeatOrgTypeInfo(java.lang.String)} 的测试方法。
*/
public final void testIsRepeatOrgTypeInfoString() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testIsRepeatOrgTypeInfoOrgTypeVO() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#getFlatOrgIdByName(java.lang.String)} 的测试方法。
*/
public final void testGetFlatOrgIdByName() ...{
fail("尚未实现"); // TODO
}
}
* Copyright reserved 2005 by XXXXCo. Ltd.
* Author:Fu wei Date:2006-9-4
*/
import junit.framework.TestCase;
/** *//**
* @author Fu wei
*/
public class OrgTypeDAOTest extends TestCase ...{
/** *//**
* @param arg0
*/
public OrgTypeDAOTest(String arg0) ...{
super(arg0);
}
/**//*
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception ...{
super.setUp();
}
/**//*
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception ...{
super.tearDown();
}
/** *//**
* 主函数
* @param args
*/
public static void main(String[] args)...{
TestRunner.run(OrgTypeDAOTest .class);
}
/** *//**
* {@link OrgTypeDAO#getOrgTypeList()} 的测试方法。
*/
public final void testGetOrgTypeList() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testInsertOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)} 的测试方法。
*/
public final void testDeleteOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testUpdateOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#getOrgTypeInfoById(java.lang.String)} 的测试方法。
*/
public final void testGetOrgTypeInfoById() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#isRepeatOrgTypeInfo(java.lang.String)} 的测试方法。
*/
public final void testIsRepeatOrgTypeInfoString() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testIsRepeatOrgTypeInfoOrgTypeVO() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#getFlatOrgIdByName(java.lang.String)} 的测试方法。
*/
public final void testGetFlatOrgIdByName() ...{
fail("尚未实现"); // TODO
}
}
JUnit单元测试一共要注意一下几点:
(1)import junit.framework.TestCase 和 junit.textui.TestRunner;
(2)继承junit.framework.TestCase ;
(3)自行添加一个main方法 中调用TestRunner.run(测试类名.class);
(4)有一个调用super(String)的构造函数;
以上都是JUnit必有的特征,除以上外,我们发现有许多以test开头的方法,而这些方法正是我们要测试的方法,Junti测试其实采用的是断言的方式,只要我们在所有test开头中的方法对数据添加断言方法,同时提供很多断言的方法,
常用断言方法 | |
assertEquals("失败提示信息","期望数据","测试数据") |
断言获取数据是否与所期望的相等 |
assertNotNull("失败提示信息","测试数据") |
断言获取数据不为null,否则提示错误 |
assertNull("失败提示信息","测试数据") |
断言获取数据是为null,否则提示错误 |
assertTrue("失败提示信息",测试数据blooean值) |
断言获取数据是否为ture,否则提示错误 |
fail("失败提示信息"); |
此方法一般放到异常处,遇到此方法,测试将停止! |
assertSame("失败提示信息","期望数据","测试数据") |
断言获取数据是否与所期望的相同 |
当我们写完所有方法策略后,JUnit测试如下图:
在方法页面中点击右键在“调试方式”或“运行方式”中点击“JUnit 测试”,就运行测试类!
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/