2016-12-07 136 views
2

如何可以爲以下的單元測試我設置AutoFixture:AutoFixture單元測試參數設置

[Theory, ... ] // <- what goes here? 
public void MyTest(int param1, string param2) 
{ 
    ... 
} 

第一參數可以採用隨機產生整數所以AutoFixture自然地適合。 第二個不能是相同的方式。我需要第二個從編譯時未知的動態生成值列表中取值。我需要告訴AutoFixture,但我不知道如何。

編輯:

在我的具體情況我需要的是該字符串PARAM是某種類型的屬性名稱。我想說到AutoFixtue:「嘿,爲參數2,從這個列表,該列表是myType.GetPropertyNames()

不AutoFixture支持此方案採取隨機字符串

回答

1

如果您需要隨機值? ,只要使用[AutoData]

[Theory, AutoData] 
public void MyTest(int param1, string param2) 
{ 
    ... 
} 

如果你需要一些預定義的測試數據,可以使用[InlineAutoData]string參數param1將在屬性得到指定的值下面的示例中int參數param2將永遠是。隨機:

[Theory] 
[InlineAutoData("predefined_string_1")] 
[InlineAutoData("predefined_string_2")] 
public void MyTest(string param1, int param2) 
{ 
    ... 
} 
+0

但是你需要知道在編譯時的值。如果「預定義」字符串是某種類型的屬性名稱,該怎麼辦?我需要能夠將有效的字符串傳遞給我的測試方法,而無需對它們進行硬編碼。這可能嗎? –

+0

>「但是你需要知道編譯時的值。」正確。 準確。如果你想測試一些行爲和隨機數據是不夠的,你需要在編譯時知道這些值。否則,如果未指定輸入測試數據,您將如何檢查系統的行爲? –

+0

我不覺得它必須是完全隨機的或完全硬編碼的值。我想通過測試數據,以某種方式對我的測試進行格式化,使其有意義。在我的具體情況下,我需要的是字符串參數是某種類型的屬性名稱。我想對AutoFixtue說:「嘿,對於param2,從列表中取出一個隨機字符串,列表是myType.GetPropertyNames()」。 –