如果我們現在直接運行這個(gè)測試項目,當然是沒(méi)法編譯通過(guò)的。因為我們還沒(méi)有創(chuàng )建Salay類(lèi)。接下來(lái)就是測試驅動(dòng)開(kāi)發(fā)中的“開(kāi)發(fā)”部分了。為了讓剛才創(chuàng )建的測試項目能夠編譯運行并通過(guò)所有的測試,我們需要做的是:
1) 向SalarySys解決方案中新添加一個(gè)Visual C++的Win 32靜態(tài)庫項目Salary。我們的開(kāi)發(fā)工作就在這個(gè)項目中進(jìn)行。
2) 在Salay項目中新添加一個(gè)類(lèi)Salary以實(shí)現工資計算的功能。為了讓測試項目中的測試可以通過(guò),我們先將Salay類(lèi)簡(jiǎn)單地實(shí)現如下:
class Salary
{
public:
Salary(int nBaseYear) {};
public:
int GetSalary(int nNow)
{
return 1300;
}
};
3) 有了開(kāi)發(fā)項目之后,接下來(lái)的工作就是將開(kāi)發(fā)項目和測試項目聯(lián)系起來(lái),讓測試項目對開(kāi)發(fā)項目進(jìn)行測試。首先,將開(kāi)發(fā)項目目錄“$(SolutionDir)\Salary\”添加為測試項目的附加包含目錄目錄,這樣測試項目可以找到Salary類(lèi)的定義。然后我們還要將開(kāi)發(fā)項目這個(gè)靜態(tài)庫鏈接到測試項目,為了完成這一步,我們需要在項目屬性中將解決方案的輸出目錄“$(OutputPath)”設置為測試項目的附加庫目錄,然后將靜態(tài)庫Salary.lib設置為測試項目的附加依賴(lài)項。
完成這些開(kāi)發(fā)項目的編寫(xiě)以及測試項目的設置之后,我們的測試項目就可以編譯通過(guò)并運行其中的測試了。

從Visual Studio 2010中測試結果
到這里,我們就完成了測試驅動(dòng)開(kāi)發(fā)過(guò)程的一次完整的迭代,接下來(lái)的工作,就是編寫(xiě)更多的測試以覆蓋設計中的所有用例,然后運行這些測試使這些測試通過(guò),如果測試暫時(shí)無(wú)法通過(guò),則對開(kāi)發(fā)代碼進(jìn)行重構實(shí)現設計使得所有測試都可以通過(guò)。例如,在上面完成第一次開(kāi)發(fā)迭代的基礎,我們可以編寫(xiě)更多的測試來(lái)覆蓋Salary類(lèi)設計中的所有功能點(diǎn):
[TestMethod]
void TestCalculationn()
{
std::unique_ptr pClass(new Salary(2003));
int cases[4][2] =
{{2003,1000},{2004,1300},
{2005,1600},{2011,3100}
};
for(int i = 0; i < 4; ++i)
{
Assert::AreEqual(cases[i][1], pClass->GetSalary( cases[i][0]));
}
};
在這里我們使用一個(gè)數組cases定義了多個(gè)測試用例,然后使用for循環(huán)對這些用例逐個(gè)進(jìn)行測試,F在我們運行測試項目中的這些測試當然是沒(méi)法通過(guò)的,所以這些測試就驅動(dòng)我們去對開(kāi)發(fā)項目中的Salary類(lèi)進(jìn)行重構,以使得這些測試可以通過(guò):
class Salary
{
public:
Salary(int nBaseYear)
:m_nBaseYear(nBaseYear)
{};
public:
int GetSalary(int nNow)
{
return 300*(nNow - m_nBaseYear) + 1000;
}
private:
int m_nBaseYear;
};
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/