使用 NSubstitute 防止调用基础 class 构造函数

Prevent call to base class constructor using NSubstitute

考虑这种我无法控制的类型:

public class Foo : FooBase {

  public Foo(IBar bar)
    : base(bar) {                       // <---- here's the problem
  }

  // other stuff...

}

我能做到:Substitute.ForPartsOf<Foo>(Substitute.For<IBar>())。但它调用基础 class' 构造函数,所以一切都坏了。

我想我可以使用一些 DoNotCallBase 魔法或类似的东西,但找不到方法。

有什么技巧可以处理这种情况吗?

不,DoNotCallBase 模拟仅适用于虚拟成员,不适用于构造函数。构造函数必须调用基本 class 构造函数之一,这是 .NET Framework 严格要求的。据我所知,没有模拟框架可以解决这个问题。

但是调用base有什么问题class?您使用接口 Mock,因此如果对 IBar 有正确的期望,一切都应该有效。