[英]Why does my C# TestClass class complain (wrongly) that its parent doesn't have a parameterless constructor?
我正在使用MSTest在C#(Visual Studio 2012)中进行一些TDD。 我有一个用[TestClass]
属性声明的类。 我的测试类继承自我要测试的类。
父类具有无参数的构造函数,但是我遇到了构建错误
'RatingsClass.OutputLine' does not contain a constructor that takes 0 arguments
这是我的基类及其无参数构造函数:
namespace RatingsClasses
{
public class OutputLine
{
public OutputLine()
{
Initialise("Parameterless constructor called");
}
(and so on)
这是从基类继承的测试类。 这将导致以下生成错误:
'RatingsClass.OutputLine' does not contain a constructor that takes 0 arguments
码:
using RatingsClasses;
namespace RatingsKataV2
{
[TestClass]
public class RatingsTests: OutputLine
{
[TestMethod]
public void TestSingleTripRatingIs20()
{
(and so on)
同样,当我尝试直接从派生类的构造函数调用基类的无参数构造函数时,会出现很多红色的波浪线,并且语法错误(例如Constructor must have body
和Unexpected token
。
这是我尝试显式调用基本构造函数的尝试:
using RatingsClasses;
namespace RatingsKataV2
{
[TestClass]
public class RatingsTests: OutputLine
{
public RatingsTests(): OutputLine()
{
}
(the rest of the class goes here)
我究竟做错了什么?
我这样做的原因是,我想测试是否正确填充了基类的各个私有成员。 与其提供getter和setter或将这些成员公开,不如说我的测试类只是从正在测试的类继承而来,以便它可以直接访问那些私有成员,这似乎是有道理的。 有更好的方法吗?
您的语法错误,无法调用基本构造函数。 您应该使用base
关键字:
public RatingsTest()
: base()
{
}
TestClass属性适用于包含单元测试的类,而不适用于作为那些测试目标的类。 通过从被测目标派生,您还可以将该目标扩展到RatingsTests。
RatingsTests不需要从OutputLine继承就可以进行测试,但是构造函数应该阅读。
public RatingsTests(): base() {}
您可以使用base
显式选择应使用的基类的构造函数:
public RatingsTests() : base()
{
}
但是,这是不必要的,因为无参构造函数是默认的构造函数(省略该构造函数时)。
您显示的第一个代码应该可以工作,因此我想您的实际代码是不同的,或者您在代码库中的某个地方有一个名为OutputLine
的第二类。
确保使用正确的OutputLine
类,并且该类实际上具有public
参数构造函数。 如果缺少public
,则它将自动为private
,并且不能被派生类使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.