2011-01-13 100 views
1

如果我有一個像下面這樣的實用方法,我該如何對它進行單元測試?似乎如果我想確定輸出是正確的,我將不得不將代碼構建到測試方法中?我可以看到是否有條件邏輯,如輸入字符串是否爲空返回null,但測試正確的輸出似乎很棘手。單元測試實用程序方法

public static string EncodeTo64(string input) 
{ 
    byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(input); 
    string returnValue = System.Convert.ToBase64String(b); 
    return returnValue; 
} 
+2

「它好像如果我想要確定輸出是正確的,我將不得不將代碼構建到測試方法中。「 - 有一所TDD學校說你應該對所有的單元測試都這樣做;在測試中編寫產生所需結果的代碼,然後將邏輯重構爲實用方法。它更多是這個概念的教學工具,但在這種情況下尤其有效。 – KeithS 2011-01-13 20:40:05

回答

5

我會測試它通過輸入一個值我知道正確的輸出。要麼通過事先計算,要麼將其與已知值進行比較。你可能能夠自己計算一個短串的輸出。

此外,我會測試像空值和空字符串的邊界條件的方法行爲。

1

這取決於這個函數的「正確性」對於你來說是什麼意思,開發者。我會將一個已知字符串轉換爲輸出,根據任何標準對我進行驗證,然後比較該函數的結果與我生成的結果相匹配。事情是這樣的:

const string expectedBase64String = "abc123$$%++"; 
const string testString = "Not the base 64 source of above"; 

Assert.AreEqual(expected, Utility.EncodeTo64(testString)); 

你是正確的本質......你需要依靠比你的代碼的行爲等正確性一些其他的定義,除非你需要測試「,這是仍在生產我第一次運行它是什麼「。

0

使用預先確定的輸入和得到的正確輸出,並與您的方法產生的結果進行比較。對多個輸入/輸出對執行此操作,以測試您的方法的整體正確性。

1

除了少數例外,你就不會在所有測試的輸出,因爲這是由另一單元中實現 - 在System.Convert類,並且它已經經過充分測試。

意義的編寫文檔時傳遞給它不同尋常的輸入方法所做的測試:空,string.Empty,非ASCII編碼字符串,等等。

+0

當然你應該測試輸出。該方法可能有一個錯誤,如使用錯誤的編碼 – 2011-01-13 20:04:50