使用ClassData自动测试TFS / xUnit仅使用第一个断言

时间:2019-04-09 12:26:11

标签: c# unit-testing xunit

我有一个容器类:

public class MyContainer : IEnumerable<object[]>
{
    public IEnumerator<object[]> GetEnumerator()
    {
        var returns = new List<string>
        {
            "zero",
            "one",
            "two",
            "three",
            "four"
        };
        foreach(var val in returns)
        {
            yield return new object[] {new MyClass{Value = val}};
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

我创建了一个简单的测试类,其中只有一个值:

public class MyClass
{
    public string Value { get; set; }
}

然后我有一个单元测试,就像这样:

[Theory]
[ClassData(typeof(MyContainer))]
public void T(MyClass v)
{
    Assert.Equal("one", v.Value);
}

然后我将测试与TFS中的测试用例相关联。如果我运行测试并断言为“一个”,则TFS中的测试将按预期失败,并且日志显示除一个测试外所有测试都将失败。

当我更改断言以测试“零”时(即,迭代中的第一个),即使发布日志显示每个“非零”列表明显失败,测试仍会通过。 trx文件也显示了此结果,但结果失败,但是测试显示成功,最后在日志中显示了此信息:

2019-04-09T12:02:02.6247328Z Total Tests : 1, Passed Tests : 1

据我了解,似乎TFS / xUnit仅测试第一个断言,如果成功,则不管其余测试如何,该测试均被视为成功。

我错过了什么,还是其他人遇到了这个问题?

0 个答案:

没有答案