如何用FakeItEasy伪造实现多个接口的类?
使用FakeItEasy伪造实现多接口的对象
你给出的代码写法本身是正确的,但可能因为版本或使用方式问题导致无法运行,以下是可行的解决方案及注意事项:
方法一:使用Implements方法链
FakeItEasy 2.0及以上版本支持通过Implements方法为伪造对象添加额外接口实现,代码如下:
// 伪造同时实现IFoo和IBar的对象 var fake = A.Fake<IFoo>(builder => builder.Implements<IBar>()); // 使用时可转换为对应接口类型 IFoo fooInstance = fake; IBar barInstance = fake as IBar; // 或直接强制转换(IBar)fake
如果需要实现更多接口,继续链式调用Implements即可:
var fake = A.Fake<IFoo>(builder => builder.Implements<IBar>().Implements<IBaz>());
方法二:通过抽象类中转(兼容旧版本)
如果你的FakeItEasy版本低于2.0,可以先定义一个实现所有目标接口的抽象类,再伪造这个抽象类:
// 定义抽象类实现IFoo和IBar public abstract class FooBarBase : IFoo, IBar { } // 伪造该抽象类 var fake = A.Fake<FooBarBase>(); // 直接作为IFoo或IBar使用 IFoo foo = fake; IBar bar = fake;
常见问题排查
- 确认FakeItEasy版本:
Implements方法是2.0版本新增的,若版本过低会报错,建议升级到最新稳定版。 - 类型转换:伪造对象本身是动态生成的代理类,需要显式转换到对应的接口类型才能调用该接口的方法。
内容的提问来源于stack exchange,提问作者EC99
相关产品推荐
相关产品推荐

