为什么我的C#TestClass类抱怨(错误地)它的父级没有无参数构造函数?

时间:2013-01-15 14:24:32

标签: c# inheritance constructor visual-studio-2012 tdd

我正在使用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 bodyUnexpected token

这是我尝试显式调用基础构造函数:

using RatingsClasses;

namespace RatingsKataV2
{
    [TestClass]
    public class RatingsTests: OutputLine
    {
        public RatingsTests(): OutputLine()
        {

        }
(the rest of the class goes here)

我做错了什么?

我这样做的原因是我想测试我的基类的各个私有成员正在正确填充。我没有提供getter和setter或者让这些成员公开,而是让我的测试类只是继承它正在测试的类,以便它可以直接访问那些私有成员。有没有更好的方法呢?

3 个答案:

答案 0 :(得分:2)

调用基础构造函数的语法错误。您应该使用base关键字:

public RatingsTest()
    : base()
{

}

答案 1 :(得分:0)

TestClass属性适用于包含单元测试的类,而不适用于作为这些测试目标的类。通过从测试中的目标派生,您还将该目标扩展到RatingsTests。

RatingsTests不需要继承OutputLine来测试,但构造函数应该读取。

public RatingsTests(): base() {}

答案 2 :(得分:0)

使用base显式选择应该使用的基类的构造函数:

public RatingsTests() : base()
{
}

但是,这是不必要的,因为无参数构造函数是省略它时使用的默认构造函数。

您展示的第一个代码应该可以使用,所以我猜您的实际代码不同,或者您的代码库中有一个名为OutputLine的第二个类。

确保您使用的是正确的OutputLine类,并且此类实际上具有public无参数构造函数。如果缺少public,则会自动private,并且派生类不能使用它。