有没有办法在多个对象上运行相同的测试集,但是根据所述对象的类型切换每个测试?
即。如果我有课程
abstract class MyObj{ abstract bool DoWork(bool isTrue); }
class SubObj1 : MyObj{ override bool DoWork(bool IsTrue){return IsTrue; } }
class SubObj2 : MyObj{ override bool DoWork(bool IsTrue){return false; } }
和测试
class Tests
{
[Test]
void Test1() { Assert.IsTrue(new SubObj1().DoWork(true)) }
[Test]
void Test2() { Assert.IsTrue(new SubObj1().DoWork(false)) }
}
我希望能够使用标志,类型检查或其他东西以便我:
SubObj1
实例MyObj
的引用
Tests
和SubObj1
上运行课程SubObj2
,但如果使用Test1
实例,则阻止SubObj2
运行?Assert.Ignore
完成。(我的代码中的真实案例涉及三种不同的非结构化数据解析器,每种解析器以不同的方式简化准确性。我有一个解析器的400个测试用例,并希望将它们移植到另外两个。创建三组几乎相同的测试用例并修剪在每个类中不起作用的测试看起来像是一次大规模的DRY故障。)
答案 0 :(得分:2)
您可以使用TestCaseSourceAttribute轻松完成。类似的东西:
class Tests
{
static object[] TestCases = new object[]
{
new object[] { new SubObj1(), true }
new object[] { new SubObj2(), false}
};
[Test, TestCaseSource("TestCases")]
void Test1(MyObj obj, bool isTrue) { Assert.IsTrue(obj.DoWork(isTrue)) }
}
(我没有尝试编译它,只是分享了基本的想法)。