Nunit - 测试受保护的方法默认构造函数缺少异常

Nunit - Test protected method default constructor missing exception

我想测试(使用 NUnit)以下 class,特别是 protected 方法 ProtectedMethod.

public class Foo
{
    protected bool ProtectedMethod()
    {
        //...
    }
}

为了访问受保护的方法,我编写了一个测试 class,它以这种方式继承自 Foo

[TestFixture]
internal class FooTestable : Foo
{
    [Test]
    public void ProtectedMethod_Test()
    {
        bool result = ProtectedMethod();
        Assert.That(result);
    }
}

但是我得到了以下错误:

FooTestable does not have a default constructor

这是什么意思?

这是测试受保护方法的最佳方式吗?

我认为测试受保护方法的最佳方法是创建继承基础 class FooTestable 和 TestClass FooTests 的 class 的可测试实现,并保留此 classes分开了。

public class FooTestable : Foo
{
    public new bool ProtectedMethod()
    {
        return base.ProtectedMethod();
    }

    public FooTestable () {}
}

[TestFixture]
public class FooTests
{
    [Test]
    public void ProtectedMethod_Test()
    {
        FooTestable fooInstance = new FooTestable();

        Assert.That(fooInstance.ProtectedMethod());
    }
}

FooTestable does not have a default constructor

报错的意思是基classFooa有带参数的构造函数,没有默认构造函数,所以需要给子class加一个构造函数并使用 base 关键字从中调用基础构造函数。

例如

    public FooTestable ():base(1,2,3)/*calling the base class constructor*/ {}
    public FooTestable (int a, int b, int c):base(a,b,c) {}