2016-12-07 98 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()”。 –