TestRunner

如何執行測試程式,並且收集測試結果?

想執行現有的test suite。 CppUnit提供執行test suite,並顯示測試結果的工具。 讓你的test suite加上一個static函數suite(),可以返回一個test suite(Test*)加到TestRunner裡。

例如,要把ComplexNumberTest加到TestRunner,就要在ComplexNumberTest裡加上下列的程式碼:

public: 
  static CppUnit::Test *suite()
  {
    CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "ComplexNumberTest" );

    suiteOfTests->addTest(
    new CppUnit::TestCaller<ComplexNumberTest>( 
        "testEquality", 
        &ComplexNumberTest::testEquality ) );

    suiteOfTests->addTest(
    new CppUnit::TestCaller<ComplexNumberTest>(
        "testAddition",
        &ComplexNumberTest::testAddition ) );

    return suiteOfTests;
  }

使用這段程式時,還要在主程式上面include這個.h檔:

#include <cppunit/ui/text/TestRunner.h>
#include "ExampleTestCase.h"
#include "ComplexNumberTest.h"

並且在主程式加上addTest(CppUnit::Test *)的程式碼。

int main( int argc, char **argv)
{
  CppUnit::TextUi::TestRunner runner;
  runner.addTest( ExampleTestCase::suite() );
  runner.addTest( ComplexNumberTest::suite() );
  runner.run();
  return 0;
}

TestRunner執行測試。如果所有的測試都通過,你將得到成功通知。如果有何失敗,你將得到下列的資訊:

  • 沒通過的test case的函數名稱

  • 沒通過的test case所屬的源始碼檔名。

  • 沒通過的test case所屬的源始碼行號。

  • 所有呼叫CPPUNIT_ASSERT()發生異常的地方。

CppUnit會區分failures和errors的不同。Failure是預料中的,透過assertions來確認。Error是沒預料到的,像是除以0或者其它C++ runtime才拋出的exception。

關鍵字翻譯

static method 靜態方法,在此為統語,稱靜態函數。(不過我個人偏好「靜態方法」)

譯註

static方法suite返回的TestTestSuite的父類別指標。

Last updated