单元测试的测试工具

现在来介绍单元测试工具,按照编程语言分组介绍。CppUnit

首先,C++单元测试工具的鼻祖CppUnit是一个免费开源的单元测试框架。因为很多专家写了很多关于CppUnit的好文章,老纳现在也不丑了。如果你想了解CppUnit,我建议看一下Cpluser的《CppUnit测试框架介绍》。文章还提供了CppUnit的下载地址。

c++测试

然后介绍C++Test,这是Parasoft的一个产品。C++test是一款功能强大的自动化C/C++单元级测试工具,可以自动测试任何C/C++函数和类,自动生成测试用例、测试驱动函数或存根函数,在自动化环境下非常容易、快速地使单元级测试覆盖率达到100%。【】中的文字引自,是华堂公司的网站。老纳想写一些关于c++测试的文字,但是发现在华堂公司的网站上无法超越介绍,于是省去了一些麻烦。想了解c++测试的朋友建议去公司网站看看。c++测试是华堂公司代理的。如果你想购买或要求报价和试用版,你可以联系他们。

视觉单位

最后介绍了国内单元测试工具Visual Unit。据说申请了很多专利,有多项创新技术,但老纳只关心是否有用,是否好用。测试代码自动生成,功能测试用例快速建立,程序行为清晰,测试完整性高,高效完成白盒覆盖,快速调试高效调试,测试报告详细。[]中的文字摘自VU开发商网站。上面提到的测试需求:完成功能测试,完整的语句覆盖,条件覆盖,分支覆盖,路径覆盖,使用VU就可以轻松实现。另外值得一提的是,使用VU还可以提高编码效率。一般来说,在完成单元测试的同时,编码调试的时间可以大大缩短。算了,我不想再谈了。我还是有兴趣炫耀我的理论,介绍我的经验,因为可以满足我当好老师的虚荣心,但是工具的介绍就没意思了。毕竟工具好不好,要我试了才知道。我最好自己去开发者网站看看,可以下载演示版和演示课件。

gtest

Gtest测试框架是为在不同平台(Linux、Mac OS X、Windows、Cygwin、Windows CE和Symbian)上编写C++测试而生成的。它是一个基于xUnit架构的测试框架,支持自动发现测试、丰富的断言集、用户自定义断言、死亡测试、致命和非致命故障、类型参数化测试、运行测试的多种选项和XML测试报告。需要了解更多的朋友可以参考《玩转Google单元测试框架gtest系列》一文。朱尼特

JUnit是Java社区中最著名的单元测试工具。它诞生于1997,由埃里希·伽马和肯特·贝克开发。其中,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版本3.x进行单元测试时,测试类必须从TestCase父类继承;

(2)试验方法应遵循的原则:

一、公共

b,无效

c,没有方法参数

方法名必须以test开头。

(3)不同的测试用例必须是完全独立的,并且不能有任何关联。

(4)、要掌握测试方法的顺序,不能依赖测试方法的执行顺序。

圆顶:

公共类TestMyNumber扩展了TestCase {

私人MyNumber myNumber

public TestMyNumber(字符串名称){

超级(名);

}

//它会在每个测试方法执行之前被调用。

@覆盖

公共void设置()引发异常{

// System.out.println(欢迎使用Junit进行单元测试……);

my number = new my number();

}

//每个测试方法执行后,都会被调用。

@覆盖

public void tearDown()引发异常{

// System.out.println(Junit单元测试结束…);

}

public void testDivideByZero() {

Throwable te = null

尝试{

myNumber.divide(6,0);

Assert.fail(测试失败);

} catch(异常e) {

e . printstacktrace();

te = e;

}

assert . assert equals(exception . class,te . getclass());

Assert.assertEquals(除数不能为0,te . getmessage());

}

}

2.junit4.x版本

(1),使用JUnit 4 . x版进行单元测试时,我们不需要test类继承TestCase父类,因为JUnit 4 . 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 comment:注释掉一个测试方法或类,被注释的方法或类将不被执行。

圆顶:

包com . an . JUnit;

导入静态org . JUnit . assert . *;

导入org . JUnit . after;

导入org . JUnit . after class;

导入org . JUnit . before;

导入org . JUnit . before class;

导入org . JUnit . test;

公共类TestMyNumber {

私人MyNumber myNumber

@BeforeClass

//在所有方法执行之前执行。

公共静态void globalInit() {

System.out.println(init all方法...);

}

@课后

//执行完所有方法后执行。

public static void global destory(){

System.out.println(destory all方法...);

}

@以前

//在每个测试方法之前执行

公共void设置(){

System.out.println(启动设置方法);

my number = new my number();

}

@之后

//在每个测试方法之后执行

公共void拆卸(){

System.out.println(end tearDown方法);

}

@Test(timeout=600)//设置受限测试方法的运行时间,超过则返回错误。

公共void testAdd() {

System.out.println(testAdd方法);

int result = myNumber.add(2,3);

assertEquals(5,结果);

}

@测试

public void testSubtract() {

system . out . println(test subtract方法);

int result = my number . subtract(1,2);

assertEquals(-1,结果);

}

@测试

public void testMultiply() {

system . out . println(test multiply方法);

int result = myNumber.multiply(2,3);

assertEquals(6,结果);

}

@测试

public void testDivide() {

System.out.println(testDivide方法);

int result = 0;

尝试{

result = myNumber.divide(6,2);

} catch(异常e) {

fail();

}

assertEquals(3,结果);

}

@Test(预期= Exception.class)

public void testDivide2()引发异常{

System.out.println(testDivide2方法);

myNumber.divide(6,0);

失败(测试错误);

}

公共静态void main(String[] args) {

}

}

有兴趣的朋友可以下来仔细研究一下,或者去安安的DIY工坊博客一起讨论。

JUnit-addons

对JUnit的一些补充,比如设置,获取被测对象的私有属性值,调用被测对象的私有方法等。

公共类:junitx.util.PrivateAccessor

Spring测试框架

您可以基于Spring测试应用程序,并通过配置文件和注释自动组装所需的单元测试对象。

提供了一些常用的J2EE模拟对象,比如HttpSession的模拟类。

可以支持自动数据库回滚,以防止单元测试(插入、删除等。)被重复,并防止数据库状态被修改。

朱尼特

模拟对象是由代码自动生成的,这使您不必手动编写n个以上的模拟类。

此外,它的Eclipse插件还可以测试覆盖率和分支统计。

EasyMock

功能和DJUnit一样,也是通过编程自动模拟出与测试对象无关的类和方法。