UT-Framework

做测试需要记住几句话:
"Testing cannot be expected to catch every error in the program: it is impossible to evaluate every execution path in all but the most trivial programs. "
"Never take two chronometers to sea. Always take one or three."
"To obtain the intended benefits from unit testing, rigorous discipline is needed throughout the software development process. And implement a sustainable process for ensuring that test case failures are reviewed daily and addressed immediately"

UT在WIKI上定义:
Unit testing is a method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures, are tested to determine if they are fit for use.Intuitively, one can view a unit as the smallest testable part of an application. In procedural programming a unit could be an entire module but is more commonly an individual function or procedure. In object-oriented programming a unit is often an entire interface, such as a class, but could be an individual method.[citation needed] Unit tests are created by programmers or occasionally by white box testers during the development process.

可以看出两点:
1. UT就是测试一些小的程序模块,在面向过程的语言中,可以是一个函数,在面向对象的语言中,可以是一个类,或者是一个成员函数。
2. UT是白盒测试,主要由代码编写者完成。如果需是专门负责百合测试的人员完成,就需要非常详细的设计文档作为基础,TDD是一个好的开始。

理想情况下,我们测试的焦点只是测试的那个模块,也就是每个Test Case是相互独立的。要实现Test Case的100%独立非常困难,因为它可能让测试的代价远远大于编写代码的代价。通常采用的方法有:

1. Stub是桩函数。它一开始是用在开发中,用来模拟还为实现的函数行为。用在测试中就是模拟已实现的函数行为。测试需要Stub的原因在于能够灵活的控制程序执行分支,更加关注测试的模块上。

2. Mock Object是Stub进化到面对对象的开发当中。用来模拟对象的行为。

3. Test Harness是自动测试框架,主要有Case的执行引擎和脚本管理构成。自动测试框架能够自动执行测试,管理测试Case和Suit,生成结果报表。这就是我们经常说的UT Framework,现在已经有很多不同的开源、商业产品可供选择。

可见一个UT Framework至少应该具有如下功能:

1. Case是基本的执行单元,并支持Test Suit,可能实现支持的方式不一样的。

2. 支持Method Stub, Mock Object,可能实现支持的方式不一样。

3. 判断和断言。能够检测路径是否走到,函数是否被调用,变量是否符合期望。判断与断言的区别在于后者将终止Case的继续执行。

4. 支持生成测试报告。

可以发现这些机制在所以的UT Framework中都有实现。可以看下Test RT。

Test RealTime is a cross-platform solution for component testing and runtime analysis of embedded software.(from IBM) Rational的很多软件都是跨平台的,虽然买得都很贵,但是不可否认还是做得不错。Test RT不仅仅可以用来做UT,还能够分析代码的执行效率,检测内存泄露,统计代码覆盖率。

1. RT用TEST CLASS和TEST CASE来组织Case和Suit。并提供PROLOGUE和EPILOGUE来做TEST CLASS准备工作和扫尾工作。

2. RT用STUB来定义Method Stub,用户自己定义Mock Object,就像写代码一样。

3. RT提供了CHECK METHOD(only usable in C++ code),CHECK STUB,CHECK等方式。

4. RT生成HTML的执行报告。

如果你使用的其他工具,可以告诉我它的实现方式。

UT Framework如何实现的呢?有两个方式:一是自己定义实现预编译,而且生成测试代码语言的相关代码,再编译执行;二是利用语言提供的能力,比如模板、反射,直接编译执行。其实我们可以自己设计和实现一个UT Framework。

你可能感兴趣的:(UT-Framework)