四、你的第一個TDD example
一切準備就緒,現在我們可以來看看怎樣添加測試代碼了。前面我們提到過,CppUnit最小的測試單位是TestCase,多個相關TestCase組成一個TestSuite。要添加測試代碼最簡單的方法就是利用CppUnit為我們提供的幾個宏來進行(當然還有其他的手工加入方法,但均是殊途同歸,大家可以查閱CppUnit頭文件中的演示代碼)。這幾個宏是:
CPPUNIT_TEST_SUITE() 開始創建一個TestSuite
CPPUNIT_TEST() 添加TestCase
CPPUNIT_TEST_SUITE_END() 結束創建TestSuite
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION() 添加一個TestSuite到一個指定的TestFactoryRegistry工廠
感興趣的朋友可以在HelperMacros.h看看這幾個宏的聲明,本文在此不做詳述。
1、一個實現兩個整數相加的類
假定我們要實現一個類,類名暫且取做CPlus,它的功能主要是實現兩個數相加(多簡單的一個類啊,這也要測試嗎?不要緊,我們只是了解怎樣加入測試代碼來測試它就行了,所以越簡單越好)。 假定這個類要實現的相加的方法是:
int Add(int nNum1, int nNum2);
Ok,那我們先來寫測試這個方法的代碼吧。TDD 可是先寫測試代碼,后寫產品代碼(CPlus)的哦!先寫的測試代碼往往是不能運行或編譯的,我們的目標是在寫好測試代碼后寫產品代碼,使之編譯通過,然后再進行重構。這就是Kent Beck說的“red/green/refactor”( 還記得基于GUI的測試環境的狀態條嗎?)。所以,上面的類名和方法應該還只是在你的心里,還只是你的idea而已。
2、在VC中為測試代碼建立一個 Project
通常,測試代碼和被測試對象是處于不同的Project中的。這樣就不會讓你的產品代碼被測試代碼所“污染 ”。 在本例中,我們將建立一個基于GUI 方式的測試環境。在VC中,我們建立一個基于對話框的Project。別忘了link正確的lib,本例中我們使用靜態的CppUnit lib。由于我們希望這個Project運行后顯示的是圖2這樣的界面,所以我們需要在App的 Instance()中屏蔽掉原有的對話框,代之以CppUnit的GUI。
CppUnit::MfcUi::TestRunner runner;
runner.addTest(PlusTest::suite()); //添加測試
runner.run(); //show UI
/*
CCPlusTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
*/
文章來源于領測軟件測試網 http://www.kjueaiud.com/