繁体   English   中英

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

[英]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 bodyUnexpected 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM