使用NSubstitute如何判断类或接口实例是否为Mock对象
NSubstitute 校验实例是否为Mock对象的实现方案
在NSubstitute中可以通过内置API实现和FakeItEasy Fake.IsFake()完全等价的校验逻辑,具体实现可根据你使用的版本选择:
方案1:适配所有NSubstitute版本的通用写法
引用NSubstitute.Core命名空间,调用上下文的动态代理校验方法:
using NSubstitute.Core; // 校验逻辑和Fake.IsFake(myVariable)完全一致 if (!SubstitutionContext.Current.IsDynamicProxy(myVariable)) { Error(); }
方案2:NSubstitute 5.0+ 版本简化写法
5.0及以上版本新增了公开扩展方法,不需要额外引用Core命名空间:
if (!myVariable.IsSubstitute()) { Error(); }
- 上述两种方法对Serilog ILoggerFactory、ILogger这类接口的Mock实例均生效,只要是NSubstitute生成的代理对象就会返回true,真实实现类实例会返回false。
- 校验逻辑不会修改Mock对象的配置状态,不会影响后续的调用断言。
内容的提问来源于stack exchange,提问作者Matt Allwood
相关产品推荐
相关产品推荐

