Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nunit-受测试保护的方法默认构造函数缺少异常_C#_Exception_Inheritance_Nunit_Protected - Fatal编程技术网

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

C# Nunit-受测试保护的方法默认构造函数缺少异常,c#,exception,inheritance,nunit,protected,C#,Exception,Inheritance,Nunit,Protected,我想测试(使用)以下类,特别是protected方法ProtectedMethod public class Foo { protected bool ProtectedMethod() { //... } } 为了访问受保护的方法,我编写了一个测试类,它以以下方式继承自Foo: [TestFixture] internal class FooTestable : Foo { [Test] public void ProtectedMet

我想测试(使用)以下类,特别是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
和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没有默认构造函数

该错误意味着基类
Foo
a具有带参数的构造函数,而没有默认构造函数,因此需要向子类添加构造函数,并使用
base
关键字从中调用基类构造函数

比如说

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

我认为测试受保护方法的最佳方法是创建继承基类
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没有默认构造函数

该错误意味着基类
Foo
a具有带参数的构造函数,而没有默认构造函数,因此需要向子类添加构造函数,并使用
base
关键字从中调用基类构造函数

比如说

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

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