我有一个带有抽象方法的抽象类,重写这个方法的子类必须遵守一定的约定。 (我不是指的是 .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
}
}
使用此方法,您可以将适用于接口(interface)所有实例的所有测试放在基类中,然后将特定于特定实现的任何测试放在该测试类中。
关于c# - 我如何测试与 NUnit 的契约(Contract)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673216/