如何使用NUnit测试合同

本文关键字:合同 测试 NUnit 何使用 | 更新日期: 2023-09-27 18:28:31

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

(我被NUnit卡住了,原因超出了我的控制范围,与这个问题无关)。

如何使用NUnit测试合同

您可以创建一个带有抽象方法的基本测试类来测试实现,然后为每个要测试的派生类创建一个派生实例。

像这样的

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

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