我想将一个字符串数组传递给我的一个XUnit测试方法,但是当我执行以下操作时它不起作用(array + params机制)
[Theory]
[InlineData(new object[] { "2000-01-02", "2000-02-01" })]
public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings)
我可以解决这个问题:
[Theory]
[InlineData(0, new object[] { "2000-01-02", "2000-02-01" })]
public void TestSynchronizeMissionStaffing_PeriodNoMatch(int dummy, string[] dateStrings)
但我希望有更好的方法来解决这个问题。
你能告诉我吗?答案 0 :(得分:16)
在方法的pubips = {}
for row in hostips_lists:
for ip in row[2:6]:
if ipaddress.ip_address(unicode(ip)).is_global:
pubips[row[0]] = ip
参数之前使用params
,然后您不需要在string[]
属性中初始化string[]
,而不是可以使用可变数量的InlineData
文字,编译器不会抱怨这一点:
string
答案 1 :(得分:9)
为了搜索者的利益-在2020年,无需进行params
或object
的强制转换即可实现。
使它正常播放的关键似乎是在编写InlineData
部分之前先编写方法签名。这是一些工作代码:
[Theory]
[InlineData(true, "expected", new string[] { "expected", "another" })]
[InlineData(false, "nope!", new string[] { "expected", "another" })]
public async void StringCheck_WithInputs_ExpectResultsMatch(bool expectedResult, string expectedString, string[] possibleStrings)
{
bool actualResult = false;
foreach(var row in possibleStrings)
{
if(row == expectedString)
{
actualResult = true;
}
}
Assert.Equal(expectedResult, actualResult);
}
答案 2 :(得分:5)
这是一个C#params功能,其中扩展了一个数组。因此xunit无法将其输入到您的一个参数中,您可以强制转换数组,如下所示:
[InlineData((object)(new object[] { "2000-01-02", "2000-02-01" }))]
另见here。
答案 3 :(得分:1)
您可以使用ClassData
或MemberData
属性。这些允许您指定返回所需数据的方法
该方法可以在单独的类(ClassData
)中,也可以在与测试(MemberData
)相同的类中的方法
这很好地解释了 http://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/
答案 4 :(得分:0)
这应该有效
[Theory]
[InlineData(new object[] { new string[] { "2000-01-02", "2000-02-01" } })]
public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings)
当你初始化一个对象数组时,你所做的所有元素都是单个对象,所以当你尝试将字符串数组作为参数传递时,它会传递对象数组的第一个元素,即" 2000-01- 02"