编辑: 山南水北 | 2019-07-01 |
- 重写 CppUnit::TestFixture::tearDown()方法释放 setUp 申请的系统资源.
01 class ComplexNumberTest : public CppUnit::TestFixture
02 {
03 private:
04 Complex *m_10_1, *m_1_1, *m_11_2;
05 public:
06 void setUp()
07 {
08 m_10_1 = new Complex( 10,
1 );
09 m_1_1 = new Complex( 1,
1 );
10 m_11_2 = new Complex( 11,
2 );
11 }
12 void tearDown()
13 {
14 delete m_10_1;
15 delete m_1_1;
16 delete m_11_2;
17 }
18 };
有了这个 fixture 之后,我们就能在开发过程中添加另外的测试用例和我们需要的其他 东西了.
3、Test Case 怎么用 fixture 编写和调用单独的测试呢? 可以分两步完成: - 把要调用的测试写成 fixture 类的一个方法;
- 创建一个运行指定方法的 TestCaller 下面是一个有了测试方法的 test case:
01 class ComplexNumberTest : public CppUnit::TestFixture
02 {
03 private:
04 Complex *m_10_1, *m_1_1, *m_11_2;
05 public:
06 void setUp()
07 {
08 m_10_1 = new Complex( 10,
1 );
09 m_1_1 = new Complex( 1,
1 );
10 m_11_2 = new Complex( 11,
2 );
11 }
12 void tearDown()
13 {
14 delete m_10_1;
15 delete m_1_1;
16 delete m_11_2;
17 }
18 void testEquality()
19 {
20 CPPUNIT_ASSERT( *m_10_1 == *m_10_1 );
21 CPPUNIT_ASSERT( !(*m_10_1 == *m_11_2) );
22 }
23 void testAddition()
24 {
25 CPPUNIT_ASSERT( *m_10_1 + *m_1_1 == *m_11_2 );
26 }
27 };
可以像下面这样创建并调用每个 test case:
1 CppUnit::TestCaller<
ComplexNumberTest>
test( testEquality , &
ComplexNumberTest::testEquality );
2 CppUnit::TestResult result;
3 test.run( &
result );
TestCaller 构造函数的第二个参数是 ComplexNumberTest 类中某个方法的地址.当TestCaller 运行的时候,指定的方法也就运行了. 但是,这些都是没用的,因为没有显示判断结果.通常,我们使用 TestRunner 来显示 测试结果.(后面会讲到) 当你有很多测试用例的时候,可以把它们组织成 test suite.
4、Suite 我们在上面已经知道如何运行单个的 test case,那怎么才能让所有的 Test Case 一次 性全部运行起来呢? CppUnit 提供了一个 TestSuite,可以把很多 Test Case 组织在一起运行. 可以按照下面的方式把两三个 test 组织成一个 test suite:
1 CppUnit::TestSuite suite;
2 CppUnit::TestResult result;
3 suite.addTest( new CppUnit::TestCaller<
ComplexNumberTest>
( testEquality ,&
ComplexNum berTest::testEquality ) );
4 suite.addTest( new CppUnit::TestCaller<
ComplexNumberTest>
( testAddition , &
ComplexNumberTest::testAddition ) );
5 suite.run( &
result );
TestSuites 不仅仅可以包含TestCases 的TestCaller , 它还能包含任何实现了CppUnit::Test 接口的对象.例如,你可以在你的代码里面创建一个 TestSuite,我也可以在 我的代码里面创建一个 TestSuite,我们可以创建一个包含这两个 TestSuite 的新的 TestSuite,然后你我两个 TestSuite 就可以一起执行了.
1 CppUnit::TestSuite suite;
2 CppUnit::TestResult result;
3 suite.addTest( ComplexNumberTest::suite() );
4 suite.addTest( SurrealNumberTest::suite() );
5 suite.run( &
result );
5、TestRunner 怎么运行测试用例并收集结果? 有了一个 TestSuite,你肯定想去运行它.CppUnit 提供了运行 suite 并显示结果的工 具-TestRunner.在你的 suite 中添加一个静态方法,获取 test suite,这样你的 suite 就能 够被 TestRunner 调用了. 例如,要使 TestRunner 能够调用 ComplexNumberTest 这个 test suite,可以在 ComplexNumberTest 中添加如下代码: