一、 配置cppunit的方法编译1. 编译$BASE\src\cppunit\CppUnitLibraries.dsw中的cppunit_dll项目,release版生成cppunit_dll.lib和cppunit_dll.dll,debug版生成cppunitd_dll.lib和cppunitd_dll.dll。这是CPPUnit基本类库。 2. 编译$BASE\src\cppunit\CppUnitLibraries.dsw中的TestRunner项目。release版生成TestRunner.lib和TestRunner.dll,debug版生成TestRunnerd.lib和TestRunnerd.dll。这是使用MFC的图形化界面的类库。 3. 把所有lib文件放置到CommonFiles\Lib目录下面。 4. 把dll文件放到相应的debug和release可执行目录下面。 设置VC1. 在vc的Option中设置cppunit的头文件路径。是$BASE\include目录。 2. 在stdafx.h中添加 #ifndef _DEBUG #pragma comment(lib, "..\\..\\CommonFiles\\Lib\\cppunit_dll.lib") #pragma comment(lib, "..\\..\\CommonFiles\\Lib\\TestRunner.lib") #else #pragma comment(lib, "..\\..\\CommonFiles\\Lib\\cppunitd_dll.lib") #pragma comment(lib, "..\\..\\CommonFiles\\Lib\\TestRunnerd.lib") #endif 因为debug和release版使用的库是不相同的 二、 不使用辅助宏的CPPUnit使用方法新建一个基于对话框的exe程序。 测试类建立一个测试类CPlusTest:
#pragma warning(push, 3) #include "..\..\cppunit\include\cppunit\testFixture.h" #include "..\..\cppunit\include\cppunit\testAssert.h" #pragma warning(pop)
class CPlusTest : public CppUnit::TestFixture { public: CPlusTest(); virtual ~CPlusTest();
void setUp() { x = 1; y = 2; };
void tearDown() { x = 0; y = 0; }; void TestEqual1() { CPPUNIT_ASSERT(x + y == 4); };
void TestEqual2() { CPPUNIT_ASSERT(x + y == 3); } private: int x; int y; };
说明: 测试类一般继承自TestFixture,它用来表示一个测试对象,用来组织测试用例。 在每个测试用例执行之前,其所属类的setUp都会执行;之后,其所属类的tearDown都会执行。对本例而言,运行TestEqual1之前会执行setUp,之后会执行tearDown;运行TestEqual2之前也会执行setUp,之后也会执行tearDown。 CPPUNIT_ASSERT用来判断括号内的值是true或者false。如果true,则表示测试成功;否则表示测试失败。也有一些别的宏可以使用。 主函数在主cpp文件中添加下面包含语句 #pragma warning(push, 3) #include "..\..\cppunit\include\cppunit\ui\mfc\TestRunner.h" #include "..\..\cppunit\include\cppunit\testCaller.h" #include "..\..\cppunit\include\cppunit\testResult.h" #include "..\..\cppunit\include\cppunit\testSuite.h" #pragma warning(pop)
在InitInstance添加下面代码,并去掉显示之前对话框的代码 CppUnit::MfcUi::TestRunner runner; CppUnit::TestSuite suite("test"); CppUnit::TestCaller<CPlusTest> test1("TestEqual1", & CPlusTest::TestEqual1); CppUnit::TestCaller<CPlusTest> test2("TestEqual2", &CPlusTest::TestEqual2); suite.addTest(&test1); suite.addTest(&test2); runner.addTest(&suite); runner.run();
说明:建立一个名字叫test的test suite。然后建立两个test case,分别名为TestEqual1和TestEqual2,对应的测试函数分别是CPlusTest::TestEqual1和CPlusTest::TestEqual2。 然后将两个测试用例添加到测试suite中。 最后把测试suite添加到runner。此处的runner是一个mfc图形界面的,也可以是文本方式的。 使用图形界面,test suite和test case分别对应着树枝和树叶,runner对应着树根。test suite可以包含别的test suite,runner也可以直接包含test case。 三、 使用辅助宏的CPPUnit使用方法(推荐)上面方法必须在主函数中做大量添加test suite和test case的操作。为了方便使用,CPPUnit提供了一些宏。 测试类的改进在测试类的声明开始添加下面四句 CPPUNIT_TEST_SUITE(CPlusTest); CPPUNIT_TEST(TestEqual1); CPPUNIT_TEST(TestEqual2); CPPUNIT_TEST_SUITE_END(); 说明:要在类的最开头,即public前面加上这些语句。该类的TestEqual1和TestEqual2分别作为一个test case放在一个test suite中。该test suite的名称是类的名称,即“CPlusTest” 在对应的cpp文件的开始加上下面语句 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTest, "plusTest"); 说明:表示添加该类对应的suite(“CPlushTest”)到一个名字是plusTest的test suite。同时plusTest这个test suite会被注册。另外,也可以使用CPPUNIT_TEST_SUITE_REGISTRATION(CPlusTest);将该类对应的suite加入到默认的test suite中(“All Tests”)。 另外只需要包含文件 #include "..\..\cppunit\include\cppunit\extensions\HelperMacros.h" 主函数的改进 主函数中只需要包含TestRunner.h 在InitInstance中只需要具有下面的语句 CppUnit::MfcUi::TestRunner runner; CppUnit::Test *pSuite = CppUnit::TestFactoryRegistry::getRegistry("plusTest").makeTest(); runner.addTest(pSuite); runner.run();
说明: 现在在图形化界面中包含了三层树结构。第一层是plusTest,第二层是CPlusTest,第三层是TestPlus1和TestPlus2。 可以给getRegistry不指定参数使用默认注册的test case,即“All Tests”。
|