c# - 我如何测试与 NUnit 的契约(Contract)?

标签 c# unit-testing nunit

我有一个带有抽象方法的抽象类,重写这个方法的子类必须遵守一定的约定。 (我不是指的是 .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/

相关文章:

java - 当有请求正文时模拟 WebClient 帖子

c# - 使用 nUnit 测试死锁

.net - 如果随机生成的输入没有用,我如何重新尝试基于属性的测试?

c# - 如何在网络方法中访问 session ?

c# - 验证在 Task.Run 中调用了 Mock 方法

c# - 在 C# 中将 IPv6 格式化为 int 并将其存储在 SQL Server 中

java - nunit 中的reporter.log() testng 等效项

c# - 从 UserAgent 字符串创建 HttpBrowserCapabilitiesBase

objective-c - 为什么在单元测试中使用 UITableViewCell 会导致 Trace/BPT 陷阱?

php - Laravel 5.4 断言邮件发送不工作