1

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

即如果我有课

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
  • TestsSubObj1and上运行类,但如果使用实例则SubObj2阻止Test1运行?SubObj2 编辑:这部分可以用Assert.Ignore.

(我的代码中的真实案例涉及三个不同的非结构化数据解析器,每个解析器都以不同的方式以简单性换取准确性。我有一个解析器的 400 个测试用例,并希望将它们移植到其他两个。几乎创建了三个相同的测试用例集并修剪在每个类中不起作用的测试似乎是一个巨大的 DRY 失败。)

4

1 回答 1

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

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

于 2013-08-02T17:54:28.413 回答