CppUnit 单元测试框架(二)

来源:互联网 发布:淘宝客成交订单在哪看 编辑:程序博客网 时间:2024/05/01 06:55

二、编写单元测试代码

在 CppUnit 中,每一个测试用例用一个类表示,该类通常用于测试一个模块,如果该模块是一个类,正好对应这个测试用例。

定义类:


每个测试用例类都必有继承自 CPPUNIT_NS::TestFixture。如:
class SampleTestCase : public CPPUNIT_NS::TestFixture

并且,这个类还需要定义一对宏:


CPPUNIT_TEST_SUITE (SampleTestCase);
CPPUNIT_TEST_SUITE_END ();

这对宏里面用于定义这个测试类所包含的测试方法。而且,在实现的源程序中也需要定义一个宏来标识该测试类:


CPPUNIT_TEST_SUITE_REGISTRATION (SampleTestCase);

除此之外,每个类还可以实现两个方法:setUp(), tearDown()。第一个方法在运行这个类的测试方法之前被调用,而第二个方法则是在运行完这个类的测试方法之后被调用。例如,如果这个测试类需要操作一个文件里的信息,通常在运行测试方法之前,需要打开指定的文件,这些处理则可以放在 setUp() 中实现。而完成测试之后,又需要将打开的文件关闭,这些操作可以在 tearDown() 中实现。这两个方法的原型是:


void setUp ();
void TearDown ();

定义测试方法

每个测试方法用于测试一段功能,通常对应于被测试类的某公开方法。例如,在 Sample 类中有一个foo () 方法,在测试类 SampleTestCase 中也可以声明一个 foo () 方法。注意,强烈建议使用相同的名称,这样便于维护。

每一个测试方法需要在类的 CPPUNIT_TEST_SUITE 宏中添加一个定义,以便 CppUnit 能够发现该测试方法,如:


CPPUNIT_TEST (foo);

在定义测试方法之后,就可以在该方法内编写单元测试代码了。单元测试框架都采用断言式的测试方式,即编写一个表达式,检查其结果是否为真,真则表示通过。在 CppUnit 中,用于检验测试是否通过的宏包括:

CPPUNIT_ASSERT (expr) : 检查表达式 expr 是否为真,真则通过,假则错误。

CPPUNIT_ASSERT_TRHOW (expr, exception) : 检查表达式 expr 是否抛出异常类型 exception, 如果抛出了指定类型的异常,则通过测试。

CPPUNIT_ASSERT_MESSAGE (message, expr) : 类似于CPPUNIT_ASSERT, 但在没有通过时输出消息 message。

CPPUNIT_FAIL (message) : 强制性不通过测试,并输出消息 message。

原创粉丝点击