無法寫入現有的代碼測試驅動的代碼,因爲測試應該寫你寫的實施之前。
最簡單的測試代碼的方法是提供TextWriter
模擬到Console.Out
並驗證生成的輸出。
更新:如果你想使用TDD,那麼你應該修改你的代碼,使其可測試。這裏你的Program
類做了很多事情 - 它負責呈現(輸出結果到控制檯)和業務邏輯(計算值)。爲了測試業務邏輯,您應該將此功能移至獨立的類。
讓我們開始。初試:
[Test]
public void ShoulReturnHoonWhenValueDivisibleOnlyBy3()
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(3);
Assert.AreEqual("HOON", result);
}
它編譯失敗,因爲你沒有HoonGroup
類。創建類,創建方法Calculate
。使代碼可編譯:
public class HoonGroup
{
public string Calculate(int value)
{
return "";
}
}
現在您的測試失敗,因爲您正在返回空字符串。只需硬編碼「HOON」即可通過測試。這與TDD確定。
public class HoonGroup
{
public string Calculate(int value)
{
return "HOON";
}
}
下一步測試:
[Test]
public void ShoulReturnGroupWhenValueDivisibleOnlyBy5()
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(5);
Assert.AreEqual("Group", result);
}
當然,測試失敗。更新實施:
public class HoonGroup
{
public string Calculate(int value)
{
return (value == 5) ? "Group" : "HOON";
}
}
看起來很愚蠢。但它實現了您的代碼的所有要求。另一項測試:
[Test]
public void ShoulReturnNullWhenValueIsNotDivisibleBy3Or5()
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(5);
Assert.IsNull(result);
}
沒問題 - 添加另一個條件:
public class HoonGroup
{
public string Calculate(int value)
{
if (value == 3)
return "HOON";
if (value == 5)
return "Group";
return null;
}
}
測試通過。我們需要更多的測試用例。這很容易與NUnit的事 - 只裝修一次測試與TestCase
屬性(MSTest also has similar feature):
[TestCase(3)]
[TestCase(6)]
[TestCase(99)]
public void ShoulReturnHoonWhenValueDivisibleOnlyBy3(int value)
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(value);
Assert.AreEqual("HOON", result);
}
而現在它更容易地創建代碼檢查,如果值是3個,然後列出所有可能的值整除:
public class HoonGroup
{
public string Calculate(int value)
{
if (value % 3 == 0)
return "HOON";
if (value == 5)
return "Group";
return null;
}
}
我想你會明白TDD的觀點和含義。爲可以被5整除的值創建更多測試用例,併爲可以被3和5整除的值編寫測試。
這是Fizz Buzz的新名字嗎? – GazTheDestroyer
不應該標記爲「家庭作業」或「採訪」? – Albireo