如果类没有接口,我可以使用 Fakes 存根吗?

4th*_*ace 0 .net c# microsoft-fakes

如果一个类没有接口,我可以使用存根吗?

我正在尝试存根类的方法。该类没有接口。该类在 Fakes intellisense 中显示为存根。该方法也在那里,但是当我尝试模拟该方法时,出现设计时错误:

Cannot assign to 'MyMethod' because it is a 'method group'
Run Code Online (Sandbox Code Playgroud)

代码

StubClassA classAStub = new StubClassA();
classAStub.MyMethod = (paramA, paramB) => {return 10;};
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为该类没有接口吗?如果是这种情况,为什么还要生成存根呢?

我唯一的选择是使用垫片吗?

Mag*_*gus 5

Fakes 为程序集中的每个未密封的类创建存根,并为每个可以重写的方法创建存根。存根纯粹基于继承,不涉及任何魔法。如果MyMethod能够被存根,它将显示为名为 的委托属性MyMethodParamType1ParamType2

如果您想覆盖普通代码无法覆盖的内容,则需要填充程序。Shims 使用某种晦涩的魔法在运行时修改 IL 并用委托替换方法。一般来说,它们的使用意味着您的代码中可能存在弱点,但无论如何对您来说可能没问题。

如果类型确实需要独立于它的契约(您的问题所暗示的),我个人建议使用接口。