2011-02-23 41 views

回答

5

這應該不難測試。如果是這樣,該方法不是爲了可測試性而設計的,而是一種代碼氣味,它告訴你需要重構它。

我傾向於寫在這些情況下如下試驗(其他人可能有更好的建議):

  1. 它的工作原理,當所有適當的參數傳遞的意圖?
  2. 當我認爲它應該會引發預期的異常嗎? (ArgumentNullException等)
  3. 對於每個參數,當我傳遞null,最小值和最大值時會發生什麼。 (這可以是非常廣泛的,取決於參數的數量。)

如果您的方法需要大量參數,請考慮重構它以獲取包含該信息的對象,以便您可以封裝規則爲它在對象中,並將該對象傳遞給該方法。

+1

阿門。如果是太難測試,它可能太硬擺在首位理解。 – averell 2011-02-23 14:16:26

+2

我加盟可測性的教會:-)如果你的功能有很多的參數,形成條件複雜格合唱團,賠率是,你可以在幾個不同的對象了分裂碼 - 每一個處理單一責任。 – Morten 2011-02-23 14:26:02

1

不知道這是什麼樣的,你正在尋找的東西,但是這是由微軟研究院創建的自動化單元測試發生器叫PEX

Pex自動生成高代碼覆蓋率的測試套件。從Visual Studio代碼編輯器開始,Pex會爲您的方法找到有趣的輸入輸出值,您可以將它們保存爲具有高代碼覆蓋率的小型測試套件。 Microsoft Pex是用於測試.NET Framework應用程序的Visual Studio加載項。

+0

與自動化測試的問題是,很多時候很難定義函數的預期結果爲不等於重新實現是非常功能的方式更普遍的情況。所以你只需要檢查函數的發佈條件是否成立。 – CodesInChaos 2011-02-23 14:23:57

+0

這是基本的測試的好工具。但是複雜的功能,例如requieres(字典)-keys,文件路徑和其它輸入這樣失敗。 – Mimefilt 2011-02-23 14:32:34

2

對於NUnit中的數據驅動測試,有[TestCase]attribute。單元測試通常不會測試每種可能的情況。他們只是測試有代表性的一組輸入,這些輸入對SUT在各種輸入上的操作有很好的覆蓋。只要選擇一些特色輸入,你就會好起來的。

+0

+1很好的提示.... – Mimefilt 2011-02-23 14:40:54

1

使用RowTest類似的問題,可以在

C#, NUnit Assert in a Loop

找到看看@「薩姆持有人」的答覆,我從它複製的代碼,有一些調整。

[TestFixture] 
    public class TestExample 
    {  

    [RowTest]  
    [Row(1)]  
    [Row(2)]  
    [Row(3)]  
    [Row(4)]  

    public void TestMethodExample(int value)  
    {   
       ... 
       ... 
       ... 
       Assert.IsTrue("some condition .."); 
    } 
} 
相關問題