我在TestCaseSource 2.6.1上使用NUnit测试具有不同对象类构造函数参数的相同断言。
我是说,
[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")
};好的,一切都很好,但这是我在NUnit控制台上收到的结果:
因此,我不知道在每次迭代中执行的测试是什么,如果其中任何一个失败了,我就无法得到失败的测试。
我的问题是:是否有任何方法来识别一个注释或类似的东西,什么是传递给测试的参数?(以do的TestCaseSource属性方式)
谢谢。
发布于 2012-10-19 13:27:37
如果使用“本机”NUnitor ReSharper作为测试运行程序,则可以重写ToString方法,以便有良好的人员定义。例如,测试代码可能如下所示:
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")
};
}Person类可以类似于:
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);
}
}结果窗口将如下所示:

我还在本地NUnit测试运行程序上进行了检查,您可能会使用它。它还很好地显示了Person:

发布于 2016-05-13 18:24:09
翻阅Ivanov的答案,如果您不想修改被测试的类来测试它,您可以在测试夹具中添加"to string“逻辑。
向夹具中添加如下方法:
IEnumerable<TestCaseData> PersonTestCases()
{
myConstructorsForMale.Select(
p => new TestCaseData(p).SetName(string.Format("Name:{0};IsMale:{1}" ,p.Name, p.IsMale));
);
}这将为您的TestCaseData列表中的每个人创建一个myConstructorsForMale实例。诀窍在于它设置了TestCaseData实例的TestCaseData属性,以告诉测试运行程序要显示什么。
一些测试运行程序可能会更好地使用SetDescription而不是SetName。
然后将TestCaseSource属性修改为:
[Test, TestCaseSource("PersonTestCases")]这样做的结果应该是:
https://stackoverflow.com/questions/12974749
复制相似问题