将字符串数组传递给xunit测试方法

时间:2016-04-05 07:14:33

标签: arrays xunit xunit.net

我想将一个字符串数组传递给我的一个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)

但我希望有更好的方法来解决这个问题。

你能告诉我吗?

5 个答案:

答案 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年,无需进行paramsobject的强制转换即可实现。

使它正常播放的关键似乎是在编写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)

您可以使用ClassDataMemberData属性。这些允许您指定返回所需数据的方法

该方法可以在单独的类(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"