如何为抽象类方法编写测试用例

时间:2018-10-17 12:48:04

标签: c# .net mocking nunit

这是我的代码,我想为Build方法编写一个单元测试,作为编写类D的测试用例的一部分。

public class X
{

}

public interface IB
{
    X GetX(X value);
}

public class B : IB
{
    public X GetX(X value)
    {
        //ToDo:
    }
}

public abstract class A
{
    private IB obj;
    public A(IB obj)
    {
        this.obj = obj;
    }
    public X Build()
    {
        return obj.GetX();
    }
}

public class D : A
{
    public void display()
    {
        //TODO
    }
}

//Test Method

[Test]

public void Test_Build(){
var mock = new Mock<IB>();

var objA = new D();
objA.Build();

}

这是我的测试方法。在调用构建方法时,我的代码由于未传递IB实例而引发异常。我不确定如何通过子类D将IB的模拟对象传递给抽象类A。

1 个答案:

答案 0 :(得分:3)

这是因为构造函数未在C#中继承。

您的基类A具有一个构造函数,该构造函数接受IB的一个实例并初始化该字段。 但是,您的继承类没有指定构造函数,因此有一个默认的无参数构造函数。

您需要为D提供一个带有IB实例的构造函数,然后将其传递给像这样的基本构造函数

public D(IB instanceOfIB)
    : base(instanceofIB)
{
    //do other things here if you want or leave empty
}