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
报错的意思是基classFoo
a有带参数的构造函数,没有默认构造函数,所以需要给子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) {}
我想测试(使用 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
报错的意思是基classFoo
a有带参数的构造函数,没有默认构造函数,所以需要给子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) {}