【问题标题】:Nunit - Test protected method default constructor missing exceptionNunit - 测试受保护方法默认构造函数缺少异常
【发布时间】:2016-06-24 05:13:02
【问题描述】:

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

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

为了访问受保护的方法,我编写了一个继承自Foo的测试类:

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

但我收到以下错误:

FooTestable does not have a default constructor

什么意思?

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

【问题讨论】:

  • 该错误通常意味着类没有不带参数的构造函数。 FooTestable 是否有一个带参数的构造函数?如果是这样,您需要将其更改为 FooTestable() : base("a", "b") 为基类构造提供默认值。

标签: c# exception inheritance nunit protected


【解决方案1】:

我认为测试受保护方法的最佳方法是创建继承基类FooTestable 和TestClass FooTests 的类的可测试实现,并将这些类分开。

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 没有默认构造函数

该错误表示基类Fooa 有带参数的构造函数,并且没有默认构造函数,因此您需要为子类添加构造函数并使用base 关键字从中调用基构造函数。

例如

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

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2023-03-10
    • 2013-08-01
    • 2011-04-27
    相关资源
    最近更新 更多