单元测试的测试工具

单元测试的测试工具,第1张

现在开始介绍单元测试工具,分别按编程语言进行分组介绍。 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掉与测试对象无关的类,方法。

不可以转换。

vcproj项目文件,这是VS2005管理VC项目的主要配置存储文件.保存着中各个文件的组织和编译方法等信息..suo是VisualStudioSolutionUserOptions.这是个二进制文件.可以清理掉.ncb是VC++IntellisenseDatabase也就是只能提示数据库文文件.可以清理掉。

清理掉这个文件可能会解决只能提示不显示的问题.每次打开VC项目后,这个文件会自动生成。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10709796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存