使用不同的对象运行相同的NUnit测试

时间:2013-08-02 16:42:28

标签: nunit

有没有办法在多个对象上运行相同的测试集,但是根据所述对象的类型切换每个测试?

即。如果我有课程

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的引用
  • TestsSubObj1上运行课程SubObj2,但如果使用Test1实例,则阻止SubObj2运行? 编辑:此部分可以使用Assert.Ignore完成。

(我的代码中的真实案例涉及三种不同的非结构化数据解析器,每种解析器以不同的方式简化准确性。我有一个解析器的400个测试用例,并希望将它们移植到另外两个。创建三组几乎相同的测试用例并修剪在每个类中不起作用的测试看起来像是一次大规模的DRY故障。)

1 个答案:

答案 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))   }
}

(我没有尝试编译它,只是分享了基本的想法)。