0

我正在使用 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 或将这些成员公开,我的测试类只是从它正在测试的类继承似乎是有意义的,这样它就可以直接访问这些私有成员。有没有更好的方法来做到这一点?

4

3 回答 3

2

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

public RatingsTest()
    : base()
{

}
于 2013-01-15T14:28:02.763 回答
0

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

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

public RatingsTests(): base() {}
于 2013-01-15T14:26:58.247 回答
0

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

public RatingsTests() : base()
{
}

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

您显示的第一个代码应该可以工作,所以我猜您的实际代码是不同的,或者您OutputLine在代码库的某处调用了第二个类。

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

于 2013-01-15T14:29:32.360 回答