如何使用NUnit测试合同?

时间:2014-10-31 11:07:52

标签: c# unit-testing nunit

我有一个抽象类的抽象类,它覆盖这个方法的子类必须支持某个契约。 (我意味着.NET代码合同,只是代码合同本身的概念)。该合同的测试代码可以是相同的。如何在保持DRY(不要重复自己)原则的同时在所有子类上使用NUnit测试此合同?

(由于我无法控制的原因而且与此问题无关,我被NUnit困住了。)

1 个答案:

答案 0 :(得分:3)

您可以使用抽象方法创建基本测试类以使测试实现,然后为每个派生类创建一个派生实例进行测试。

像这样的东西

[TestClass]
public abstract class TestBase
{
     protected abstract IMyInterface GetObjectToTest();

     [Test]
     public void TestMethod()
     {
          IMyInterface objectToTest = GetObjectToTest();
          //Do your generic test of all implementations of IMyInterface
          objectToTest.Setup();
          //...
          Assert.Equal(objectToTest.Property,100);
          //etc
     }
}

[TestClass]
public class ConcreteTestClass : TestBase
{
    protected override GetObjectToTest()
    {
         return new ConcreteImplementationOfIMyObject();
    }

    [Test]
    public void TestConcreteImplementationOfIMyObjectSpecificMethod()
    {   
        //test method for stuff which only applies to ConcreteImplementationOfIMyObject types
    }
 }

使用此方法,您可以将所有适用于接口的所有实例的测试放在基类中,然后在该测试类中放置特定于特定实现的任何测试。