2011-07-21 26 views
4

我已閱讀過有關在單元測試中爲使用生成自動值但無法找到它的庫的信息。基本上,我想要的是不是:C#庫自動爲單元測試生成值

[Test] 
public void Test() 
{ 
    int x = 2; 
    int y = 5; 

    Assert.AreEqual(7, ObjectUnderTest.Add(x, y)); 
} 

我想寫:

[Test] 
public void Test() 
{ 
    int x = Lib.Int(); 
    int y = Lib.Int(); 

    Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y)); 
} 

更新:

AutoFixture是我要找的人。隨着AutoFixture,我的測試將是:

[Test] 
public void Test() 
{ 
    var fixture = new Fixture(); 
    int x = fixture.CreateAnonymous<int>(); 
    int y = fixture.CreateAnonymous<int>(); 

    Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y)); 
} 

回答

3

我還沒有使用任何這些,但我也對這個話題感興趣。

這是round up of all of them由另一個工具,看起來值得檢查出QuickGenerate的作者完成。

+0

謝謝貝里爾,AutoFixture是我正在尋找的。 – tvbusy

+0

如果他回答了你的問題,你應該這樣標記。 – UrbanEsc

7

我認爲你可以使用PEX

Pex自動爲.NET程序生成一個高代碼覆蓋率的小測試套件 。爲此,Pex執行系統程序 分析(使用動態符號執行,類似於路徑有界的 模型檢查)以確定參數化單元測試的測試輸入。 Pex通過監視執行軌跡來了解程序行爲。 Pex 使用約束求解器來產生新的測試輸入,其執行不同的程序行爲。

1

NBuilder是一個很棒的庫,用於創建測試數據和對象集。它使用流暢的API,所以它很容易,恕我直言,拿起並開始使用它。

這樣的(未測試編譯):

[Test] 
public void Test() 
{ 
    int x = Builder<int>.CreateNew().Build(); 
    int y = Builder<int>.CreateNew().Build(); 

    Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y)); 
} 

有方法來創建隨機數據也是如此。

0

你可以這樣做,並使用NBuilder自動生成值(http://nbuilder.org/)。

如果你只是想隨機整數(也就是你將與NBuilder得到什麼)還有一個更簡單的方法來做到這一點爲好,只需使用內置的Random類

http://msdn.microsoft.com/de-de/library/system.random.aspx

不過,如果你希望更多的靈活性和功能超越簡單的數學運算,我認爲你真正想要做的是實現一個數據驅動的單元測試。看看這個鏈接,它很容易設置:

http://msdn.microsoft.com/en-us/library/ms182527(v=VS.100).aspx

您可以設置一個單元測試,這樣,而不是鍵入值到測試方法,你可以從一個數據源檢索值。數據源中的每一行都會連續運行單元測試。這使得在單次測試中很容易測試各種輸入。

指定一系列值和預期結果並對其進行測試。