伪造派生类但调用真正的构造函数并忽略基础构造函数

时间:2017-08-27 09:21:22

标签: c# unit-testing mocking

我有以下课程:

public class Base
{
    private int x;
    public Base(int _x) { x = _x; }
}
public class Derived : Base
{
    int y;
    public Derived(int _x,int _y) : base(_x) { y = _y; }
}

我想创建一个假的'Derived'对象,但要调用原始构造函数并忽略基础构造函数。 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

实际上我找到了一个解决方案。 我调查了一下,发现我可以用Typemock

来做
Isolate.Fake.Instance<Derived(Members.CallOriginal,ConstructorWillBe.Called, BaseConstructorWillBe.Ignored);

它允许我创建一个假对象,调用原始构造函数并忽略基础构造函数。

答案 1 :(得分:0)

你不能。实例化Derived对象时,Base 的构造函数必须运行;毕竟,Derived实例也是Base,创建Base的逻辑必须在流程的某个位置执行。

你可能会混淆不调用base构造函数,而是隐式调用它的情况;当Base具有可访问的默认构造函数时会发生这种情况:

public class Base
{
    private int x;
    public Base() { } //default constructor
    public Base(int _x) { x = _x; }
} 

然后这是合法的:

public class Derived : Base
{
    int y;
    public Derived(int _y) { y = _y; } //no explicit base() needed.
}

但这只是因为编译器会为你添加隐式调用。真正的代码是:

public class Derived : Base
{
    int y;
    public Derived(int _y) : base() { y = _y; }
}

这似乎是XY Problem。你真的想做什么?