单元测试的测试工具
现在开始介绍单元测试工具,分别按编程语言进行分组介绍。 CppUnit
首先是CppUnit,这是C++单元测试工具的鼻祖,免费的开源的单元测试框架。由于已有一众高人写了不少关于CppUnit的很好的文章,老纳就不现丑了,想了解CppUnit的朋友,建议读一下Cpluser 所作的《CppUnit测试框架入门》,。该文也提供了CppUnit的下载地址。
C++Test
然后介绍C++Test,这是Parasoft公司的产品。[C++Test是一个功能强大的自动化C/C++单元级测试工具,可以自动测试任何C/C++函数、类,自动生成测试用例、测试驱动函数或桩函数,在自动化的环境下极其容易快速的将单元级的测试覆盖率达到100%]。内的文字引自,这是华唐公司的网页。老纳想写些介绍C++Test的文字,但发现无法超越华唐公司的网页上的介绍,所以也就省点事了,想了解C++Test的朋友,建议访问该公司的网站。华唐公司代理C++Test,想要购买或索取报价、试用版都可以找他们。
Visual Unit
最后介绍Visual Unit,简称VU,这是国产的单元测试工具,据说申请了多项专利,拥有一批创新的技术,不过老纳只关心是不是有用和好用。[自动生成测试代码 快速建立功能测试用例程序行为一目了然 极高的测试完整性 高效完成白盒覆盖 快速排错 高效调试 详尽的测试报告]。内的文字是VU开发商的网页上摘录的,。前面所述测试要求:完成功能测试,完成语句覆盖、条件覆盖、分支覆盖、路径覆盖,用VU可以轻松实现,还有一点值得一提:使用VU还能提高编码的效率,总体来说,在完成单元测试的同时,编码调试的时间还能大幅度缩短。算了,不想再讲了,老纳显摆理论、介绍经验还是有兴趣的,因为可以满足老纳好为人师的虚荣心,但介绍工具就觉得索然无味了,毕竟工具好不好用,合不合用,要试过才知道,还是自己去开发商的网站看吧,可以下载演示版,还有演示课件。
gtest
gtest测试框架是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的。它是基于xUnit架构的测试框架,支持自动发现测试,丰富的断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。需要详细了解的朋友可以参阅《玩转Google单元测试框架gtest系列》该篇文章。 JUnit
JUnit 是 Java 社区中知名度最高的单元测试工具。它诞生于 1997 年,由 Erich Gamma 和 Kent Beck 共同开发完成。其中 Erich Gamma 是经典著作《设计模式:可复用面向对象软件的基础》一书的作者之一,并在 Eclipse 中有很大的贡献;Kent Beck 则是一位极限编程(XP)方面的专家和先驱。JUnit 设计的非常小巧,但是功能却非常强大。JUnit ——是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。
JUnit的好处和JUnit单元测试编写原则:
好处:可以使测试代码与产品代码分开;针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试;易于集成到测试人员的构建过程中,JUnit和Ant的结合可以实施增量开发;JUnit是公开源代码的,可以进行二次开发;可以方便地对JUnit进行扩展;
编写原则:是简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写;是使测试单元保持持久性;是可以利用既有的测试来编写相关的测试;
JUnit使用帮助
1、junit3.x版本,我们通常使用junit 3.8
(1)、使用junit3.x版本进行单元测试时,测试类必须要继承于TestCase父类;
(2)、测试方法需要遵循的原则:
A、public的
B、void的
C、无方法参数
D、方法名称必须以test开头
(3)、不同的Test Case之间一定要保持完全的独立性,不能有任何的关联。
(4)、我们要掌握好测试方法的顺序,不能依赖于测试方法自己的执行顺序。
dome:
public class TestMyNumber extends TestCase {
private MyNumber myNumber;
public TestMyNumber(String name) {
super(name);
}
// 在每个测试方法执行 [之前] 都会被调用
@Override
public void setUp() throws Exception {
// System.out.println(欢迎使用Junit进行单元测试…);
myNumber = new MyNumber();
}
// 在每个测试方法执行 [之后] 都会被调用
@Override
public void tearDown() throws Exception {
// System.out.println(Junit单元测试结束…);
}
public void testDivideByZero() {
Throwable te = null;
try {
myNumber.divide(6, 0);
Assert.fail(测试失败);
} catch (Exception e) {
e.printStackTrace();
te = e;
}
Assert.assertEquals(Exception.class, te.getClass());
Assert.assertEquals(除数不能为 0 , te.getMessage());
}
}
2、junit4.x版本
(1)、使用junit4.x版本进行单元测试时,不用测试类继承TestCase父类,因为,junit4.x全面引入了Annotation来执行我们编写的测试。
(2)、junit4.x版本,引用了注解的方式,进行单元测试;
(3)、junit4.x版本我们常用的注解:
A、@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行;
B、@After 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行;
C、@BeforeClass 注解:在所有方法执行之前执行;
D、@AfterClass 注解:在所有方法执行之后执行;
E、@Test(timeout = xxx) 注解:设置当前测试方法在一定时间内运行完,否则返回错误;
F、@Test(expected = Exception.class) 注解:设置被测试的方法是否有异常抛出。抛出异常类型为:Exception.class;
G、@Ignore 注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。
dome:
package com.an.junit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestMyNumber {
private MyNumber myNumber;
@BeforeClass
// 在所有方法执行之前执行
public static void globalInit() {
System.out.println(init all method...);
}
@AfterClass
// 在所有方法执行之后执行
public static void globalDestory() {
System.out.println(destory all method...);
}
@Before
// 在每个测试方法之前执行
public void setUp() {
System.out.println(start setUp method);
myNumber = new MyNumber();
}
@After
// 在每个测试方法之后执行
public void tearDown() {
System.out.println(end tearDown method);
}
@Test(timeout=600)// 设置限定测试方法的运行时间 如果超出则返回错误
public void testAdd() {
System.out.println(testAdd method);
int result = myNumber.add(2, 3);
assertEquals(5, result);
}
@Test
public void testSubtract() {
System.out.println(testSubtract method);
int result = myNumber.subtract(1, 2);
assertEquals(-1, result);
}
@Test
public void testMultiply() {
System.out.println(testMultiply method);
int result = myNumber.multiply(2, 3);
assertEquals(6, result);
}
@Test
public void testDivide() {
System.out.println(testDivide method);
int result = 0;
try {
result = myNumber.divide(6, 2);
} catch (Exception e) {
fail();
}
assertEquals(3, result);
}
@Test(expected = Exception.class)
public void testDivide2() throws Exception {
System.out.println(testDivide2 method);
myNumber.divide(6, 0);
fail(test Error);
}
public static void main(String args) {
}
}
有兴趣的朋友可以下下来仔细研究下,也可以到安安DIY创作室博客一起讨论一下。
JUnit-addons
对JUnit的一些补充,比如设置、获取被测试对象的私有属性的值,调用被测试对象的私有方法等。
常用类:junitx.util.PrivateAccessor
Spring 测试框架
可以测试基于Spring的应用,通过配置文件和注解自动组装需要的单元测试对象。
提供了一些常用的J2EE Mock对象,比如HttpSession的Mock类等。
可以支持数据库自动回滚,以防止对数据库的单元测试(插入,删除等)不可重复执行,防止修改数据库状态等。
DJUnit
通过代码自动产生Mock对象,省去了自己手动编写N多的Mock类。
此外,它的Eclipse插件还可以做到测试覆盖率、分支统计。
EasyMock
功能同DJUnit,也是通过编程自动Mock掉与测试对象无关的类,方法。
自动化测试的工具有哪些
商业工具:
1、RFTRational Functional Tester 的基础是针对于Java、.NET的对象技术和基于 Web 应用程序的录制、回放功能。工具为测试者的活动提供的自动化的帮助,如数据驱动测试。IBM RFT是一个用于功能和回归测试的数据驱动的测试平台。它支持大范围的应用,例如.Net、Java、SAP、Flex和Ajax。RFT使用Visual Basic。Net和Java作为脚本语言。RFT有一个独特的功能,称为 Storyboard 测试,用户的动作被记录下来,并通过应用截图在 Storyboard 格式中可视化。RFT的另一个有趣特性是它与IBM Jazz应用生命周期管理系统(如IBM Rational Team Concert和Rational Quality Manager)的集成。
2、kylinTOP:这是一款国产的自动化测试工具,支持WEB和APP的自动化测试,其中元素智能定位是这款自动化软件主要特点,是设计理念比较超前的测试工具,算是国内众多自动化测试工具中,做的比较突出的一款。与传统的RFT和UFT相比,的确有过人之处,算是后起之秀,使用起来,简单高效、稳定。这样描述估计也没几个人能体会到的。说白一点就是一个人可以干三个人的活,使用者只需关注业务即可。
3、UFT:UFT(别名:QuickTest Professional简称QTP)是一种自动化测试工具,以VBScirpt为内嵌语言,其前身是QTP。UFT支持功能测试和回归测试自动化,可用于软件应用程序和环境的测试。UFT自动化测试的基本功能包括:创建测试、检验数据、增强测试、运行测试脚本、分析测试结果、维护测试;UFT支持两种视图,一种是Keyword View(关键字视图),另一种是Expert View(专家视图)。是一款老牌的自动化测试工具。
4、SilkTest:这个也是比较相对著名的工具,不过同样还是没有了解过,对于商业的工具,因为其占地面积大,还要破解等麻烦事,最关键的是使用的公司少,所以只使用过QTP,其它的一概未了解过
开源工具:1、Selenium:这个应该大多数人都知道的,现在也是大多数互联网公司在使用的测试框架;selenium仅支持web的UI级别测试,但是其优点在于:a、支持多种语言编写测试脚本,比如:java、python、ruby、perl等;同时也就意味着其后的支持类库也是很多的b、支持多浏览器,如:ie,ff,safari、chrome等c、支持多平台,如:windows、linux、MAC、android、iphone等d、支持分布式执行,一套测试用例可以同时分布到不同的测试机上执行,而且还可以进行任务细化,比如:针对liunx执行系统只分配linux下需要执行的用例此外还有录制工具支持,简单也说,web类测试基本上是首选,不过对flash的支持好像不是太好其主要分2个版本,1.X版本是以js驱动来进行自动化实现的;2.X重新开发了webdriver来代替js驱动,直接调用浏览器底层接口来完成自动化实现的前提:如果使用remote或者RC功能,需安装jre下载地址:
Java怎么进行单元测试有具体过程和例子吗
用junit吧.
新建一个workplace项目,点击文件-》新建-》项目,选择java项目,点击下一步。起一个项目名称,例如ProjectWithJUnit。点击完成。这样就完成新项目的建立了。再来配置一下Eclipse,在构建路径中添加JUnit类库。在工具条上点击项目-》属性,选择Java构建路径,库,选择添加外部JAR,浏览Junit被存储的目录,选择junit.jar,点击打开。你将会看见JUnit出现在库的列表中。点击确定,让Eclipse重建路径.
-测试工具