C#NUnit参数化TestCaseSource值标识

fer*_*ega 5 c# nunit

我在NUnit 2.6.1上使用TestCaseSource来测试具有不同对象类构造函数参数的相同Assert.

我的意思是,

[Test, TestCaseSource("myConstructorsForMale")}
public void CheckMale(Person p) 
{
     Assert.That(p.IsMale);
}

static Person[] myConstructorsForMale = 
                     {
                         new Person("John"),
                         new Person(isMale=true),
                         new Person("Doe")
                     };
Run Code Online (Sandbox Code Playgroud)

好的,一切运行正常,但这是我在NUnit控制台上收到的结果:

  • CheckMale
    • CheckMale(人)
    • CheckMale(人)
    • CheckMale(人)

所以我不知道每次迭代执行的测试是什么,如果其中任何一个失败,我就无法得到失败的测试.

我的问题是:有没有办法用注释或类似的东西来识别传递给测试的参数是什么?(在TestCaseSource属性方式中做)

谢谢.

Ily*_*nov 11

如果使用"本机"NUnitor ReSharper作为测试运行器,则可以覆盖ToString方法,以便您具有良好的Person定义.例如,您的测试代码可能如下所示:

public class PersonTests
{
    [Test, TestCaseSource("myConstructorsForMale")]
    public void CheckMale(Person p)
    {
        Assert.That(p.IsMale);
    }

    static Person[] myConstructorsForMale = 
                 {
                     new Person("John"),
                     new Person{IsMale=true},
                     new Person("Doe")
                 };
}
Run Code Online (Sandbox Code Playgroud)

人类可能是这样的:

public class Person
{
    public Person(string name)
    {
        this.Name = name;
    }

    public Person() { }

    public string Name { get; set; }
    public bool IsMale { get; set; }

    public override string ToString()
    {
        return string.Format("Name:{0};IsMale:{1}", Name, IsMale);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果窗口如下所示: ReSharper测试运行结果

我还在你可能使用的原生NUnit测试运行器上检查过它.它还可以很好地显示人物: NUnit测试运行结果