我正在使用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或者让这些成员公开,而是让我的测试类只是继承它正在测试的类,以便它可以直接访问那些私有成员。有没有更好的方法呢?
答案 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
,并且派生类不能使用它。