You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Moq的AddScoped模拟代码转换为NSubstitute实现?

解决NSubstitute替代Moq的Mock.Of初始化属性问题

原Moq代码通过Mock.Of<T>用表达式直接设置模拟对象的属性返回值,NSubstitute的语法逻辑不同,你之前的写法不符合它的API规范,所以报错。正确的实现方式是先创建替代实例,再单独配置属性的返回值:

services.AddScoped(provider => {
    var currentUserService = Substitute.For<ICurrentUserService>();
    currentUserService.UserId.Returns(_currentUserId);
    return currentUserService;
});

原因说明

  • Moq的Mock.Of<T>(expression)支持通过表达式直接定义成员行为,但NSubstitute的Substitute.For<T>()方法仅接受构造函数参数(接口无构造函数时无需传参),不支持这种条件表达式语法。
  • NSubstitute配置属性返回值的标准方式是调用Returns()方法,针对目标属性单独设置返回内容。

如果需要同时配置多个属性,可以链式扩展:

services.AddScoped(provider => {
    var currentUserService = Substitute.For<ICurrentUserService>();
    currentUserService.UserId.Returns(_currentUserId);
    currentUserService.UserName.Returns("测试用户");
    currentUserService.TenantId.Returns("租户001");
    return currentUserService;
});

内容的提问来源于stack exchange,提问作者RoLYroLLs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:52:03