如何使用NUnit测试合同
本文关键字:合同 测试 NUnit 何使用 | 更新日期: 2023-09-27 18:28:31
我有一个带有抽象方法的抽象类,覆盖该方法的子类必须维护某个约定。(我不是指.NET的代码契约,只是代码契约本身的概念)。此合同的测试代码可以相同。在保持DRY(不要重复)原则的同时,我如何在所有子类上用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
}
}
使用此方法,您可以将应用于接口所有实例的所有测试放在基类中,然后将特定于特定实现的任何测试放在该测试类中。