【发布时间】:2017-01-23 14:59:02
【问题描述】:
我正在使用 NUnit 2 为 C# 编写一些单元测试。我的环境是安装了 Resharper 的 Visual Studio 2015 Professional。
我遇到的问题是我尝试使用TestCaseSourceAttribute 创建的一些参数化测试。在简单的情况下,我可以创建可以正常工作的测试:
[Test, TestCaseSource(nameof(MyTestCases))]
public void MyTest(string name) {
Assert.IsFalse(String.IsNullOrEmpty(name));
}
private static IEnumerable<TestCaseData> MyTestCases {
get {
yield return new TestCaseData("test");
yield return new TestCaseData("123");
}
}
但是,当我尝试实例化必须从数据库实体映射或在初始化过程中检查数据库的类型时,测试运行程序会忽略该测试。例如:
[Test, TestCaseSource(nameof(MyTestCases))]
public void MyTest(MyMappedType instance) {
Assert.IsTrue(instance.SomeProperty);
}
private static IEnumerable<TestCaseData> MyTestCases {
get {
yield return new TestCaseData(GetAnInstanceOfMyMappedType());
yield return new TestCaseData(GetADifferentInstanceOfMyMappedType());
}
}
MyMappedType 的实例化如果在测试体本身中就可以正常工作,但如果有任何测试用例实例化它,则测试将被忽略。
我可以让这些测试以参数化的方式工作吗?有关于此的任何文档参考?
更新:
问题似乎是由于测试用例属性中的某些代码依赖于已经运行的类的TestSetup 方法。有没有办法在初始化每个测试用例之前而不是之后运行设置?
【问题讨论】:
标签: c# unit-testing nunit