【问题标题】:How to write a test case for abstract class method如何为抽象类方法编写测试用例
【发布时间】:2018-10-17 12:48:03
【问题描述】:

这是我的代码,我想为 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();

}

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

【问题讨论】:

  • 你的问题是什么?
  • A classA = new D(); classA.Build();
  • 您的代码无法编译。 D 不能继承 A,因为构造函数不匹配 public A(IB obj)。所以先解决这个问题,然后就应该清楚了。
  • 到目前为止你尝试过什么?这是一种书面的“给我代码”。

标签: c# .net mocking nunit


【解决方案1】:

这是因为 C# 中没有继承构造函数。

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

你需要为 D 提供一个构造函数,它接受一个 IB 的实例,然后像这样将它传递给基础构造函数

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2018-09-23
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多