如果我们将“BoostUnitTest.cpp”中的第13行改成:
BOOST_CHECK(tmpTested->add(2, 2) == 3);
单元测试运行结果是不通过,如下图:
至此,如何进行一个简单的Boost单元测试的过程就完成了。
// 添加于2014.10.18 ---------------------------------------------------------------------------
现在,我在之前程序的基础上又添加了一点异常测试,相关的源代码如下:
1 #include <iostream> 2 3 using namespace std; 4 5 class Tested 6 { 7 public: 8 9 Tested(); 10 virtual ~Tested(); 11 int add(const int a, const int b); 12 void testException(); 13 14 private: 15 16 }; 1 #include "tested.h" 2 3 Tested::Tested() 4 { 5 6 } 7 8 Tested::~Tested() 9 { 10 11 } 12 13 int Tested::add(const int a, const int b) 14 { 15 return a + b; 16 } 17 18 void Tested::testException() 19 { 20 throw logic_error("my throw"); // 抛出一个逻辑错误异常 21 } |
1 #define BOOST_TEST_MODULE Tested_Module // 主测试套件,一个测试项目中只能有一个主测试套件 2 3 #include "stdafx.h" 4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h" // 待测工程头文件 5 6 struct Tested_Fixture // 测试夹具 7 { 8 Tested_Fixture() 9 { 10 BOOST_TEST_MESSAGE("setup fixture"); 11 tmpTested = new Tested(); 12 } 13 ~Tested_Fixture() 14 { 15 BOOST_TEST_MESSAGE("teardown fixture"); 16 delete tmpTested; 17 } 18 Tested * tmpTested; 19 }; 20 21 BOOST_FIXTURE_TEST_SUITE(Tested_test, Tested_Fixture) // 测试套件 22 23 BOOST_AUTO_TEST_CASE(Tested_Method_add_Test) // 测试用例 24 { 25 // TODO: Your test code here 26 BOOST_WARN(tmpTested->add(2, 2) == 4); // WARN型预言检测 27 BOOST_CHECK(tmpTested->add(2, 2) == 4); // CHECK型预言检测 28 BOOST_REQUIRE(tmpTested->add(2, 2) == 4); // REQUIRE型预言检测 29 30 } 31 32 BOOST_AUTO_TEST_CASE(Tested_Method_testException_Test) // 测试用例 33 { 34 // TODO: Your test code here 35 BOOST_REQUIRE_NO_THROW(tmpTested->testException()); // 验证是否无异常抛出,是则为真 36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); // 验证抛出的是否是logic_error异常 37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); // 验证抛出的是否是runtime_error异常 38 39 } 40 41 BOOST_AUTO_TEST_SUITE_END() |
很显示,程序的运行结果如下:
35 BOOST_REQUIRE_NO_THROW(tmpTested->testException()); // 测试不通过
36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); // 测试通过
37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); // 测试不通过
如果要进行更复杂的测试,可以参考官方文档。