从Moq迁移至NSubstitute:测试基类替代MockRepository.Create方案咨询
从Moq的MockRepository.Create切换到NSubstitute的正确方式
- 别碰
NSubstitute.Core.SubstituteFactory,这是框架内部实现类,官方不对外暴露,既没有公开文档支持,后续版本还可能随意变更,完全不适合外部代码直接调用。 - NSubstitute本身没有类似Moq中
MockRepository的集中管理模式,直接用Substitute.For<TMock>()就能替代_mockRepository.Create<TMock>()的功能,生成对应类型的模拟实例。
代码示例
原来的Moq初始化代码:
mockInstance = _mockRepository.Create<TMock>();
替换成NSubstitute的写法:
mockInstance = Substitute.For<TMock>();
如果你的TMock需要传入构造参数(比如带有非默认构造函数),可以直接在方法中传入参数:
// 假设TMock需要一个int类型的构造参数 mockInstance = Substitute.For<TMock>(123);
补充说明
NSubstitute的设计思路和Moq不同,它不需要通过Repository来管理模拟对象,直接通过静态方法Substitute.For系列就能创建实例,同时支持对接口、带有虚方法/抽象成员的类进行模拟。如果之前用MockRepository是为了统一设置行为(比如严格模式),NSubstitute可以通过全局配置或者单独对实例设置验证规则来实现。
内容的提问来源于stack exchange,提问作者orgg
相关产品推荐
相关产品推荐

