单元测试的测试工具
首先,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一样,也是通过编程自动模拟出与测试对象无关的类和方法。