当前位置: 首页 > news >正文

NSubstitute之Substitute.ForT

_currentUser = Substitute.For<ICurrentUser>();
这是 NSubstitute(一个 .NET 单元测试 mock 框架)中的标准用法,用来“创建一个假的 ICurrentUser 实例”。

下面详细解释它的逻辑。


到底发生了什么?

Substitute.For<T>() 的作用是:

创建一个可替代(mock)的 T 类型实例,这个实例可以记录调用、返回你设定的值、并用于断言。

所以:

_currentUser = Substitute.For<ICurrentUser>();

等价于:

“创建一个假的 ICurrentUser 对象,它实现所有 ICurrentUser 上的方法和属性,但行为都由我控制。”

也就是 mock / stub / fake。


🔍 这个 fake ICurrentUser 有什么能力?

它默认:

  • 所有属性、方法都会返回 默认值(如 null、0、false)。
  • 它可以记录“谁调用了我”。
  • 你可以给它设定返回值。
  • 你可以检查它是否收到某个调用。

例如:

✔️ 设定值

_currentUser.Id.Returns(Guid.Parse("..."));
_currentUser.UserName.Returns("John");

✔️ 测试某个方法是否调用过 ICurrentUser

await someService.DoWork();
_currentUser.Received().Id;  // 断言 Id 被访问过

✔️ 设定更复杂的行为

_currentUser.FindClaim("role").Returns(new Claim("role", "admin"));

🧠 为什么要这样写?

在 ABP 或 ASP.NET Core 中,ICurrentUser 是依赖注入来的,不可能在单元测试中依赖真实用户。

测试应该在无用户登录也能运行,或者测试“模拟登录”。

所以 NSubstitute 提供了这种 fake 来模拟各种情况:

例:模拟当前用户已登录:

_currentUser.IsAuthenticated.Returns(true);
_currentUser.UserName.Returns("Tester");

例:模拟当前用户没有权限:

_currentUser.GetId().Returns((Guid?)null);

📝 总结一句话

Substitute.For<ICurrentUser>() 会创建一个假的 ICurrentUser 对象,用于单元测试时替换真实的用户上下文,让你可以自由设置当前用户的各种属性与行为,并可断言调用状况。


http://icebutterfly214.com/news/42018/

相关文章:

  • 云服务器部署Python后端偶遇`ImportError`: 从依赖版本到Python升级的排错全攻略 - 实践
  • AI元人文:悟空继续追问
  • PELT算法浅析
  • 详细介绍:像素退场,曲线登场:现代响应式 CSS 全家桶 | 领码课堂
  • Softmax 函数全面而详细的解读,原理、图像、应用 - 详解
  • 酵母单杂交 (Y1H):蛋白质 - DNA 互作研究的 基因解码器
  • 20251115 - Hash 总结
  • 详细介绍:【Linux】07.Ubuntu开发环境部署
  • 2025年11月中国伸缩门源头厂家口碑推荐榜单
  • 2025年步进式加热直饮水机订制厂家权威推荐榜单:奶茶店全自动烧水器/大型工业净水器/饭店专用开水器源头厂家精选
  • 2025 年 11 月漆渣脱水设备,漆渣脱水机,漆渣脱水装置最新推荐,技术实力与市场口碑深度解析!
  • 2025年全自动无屑切割倒角一体机实力厂家权威推荐榜单:自动化切割倒角一体机/切割倒角一体机/自动切割倒角一体机源头厂家精选
  • 2025 最新推荐!汽车喇叭网生产厂家权威排行榜,0.01MM 精度 + 全工艺保障,靠谱品牌甄选
  • 2025年毕业论文救星:6款免费AI写论文工具实测推荐
  • 2025年RFID服装标签批发厂家权威推荐榜单:RFID服装吊牌标签/服装门店盘点标签/服装零售电子标签源头厂家精选
  • 2025 最新净水器厂家推荐排行榜:母婴级安全、无阻垢弱碱、杜邦 / 陶氏 RO 膜,高性价比国货品牌精选斯里兰卡椰壳炭/制冰/DIY/厨下净水器公司推荐
  • mns 1115
  • 过敏
  • 腹泻与脱水
  • 2025 年 11 月集装袋厂家推荐排行榜,集装袋/吨袋,食品级集装袋,导电/防静电集装袋,液体集装袋,危险品集装袋,耐高温集装袋公司推荐
  • 【机器学习01】监督学习、无监督学习、线性回归、代价函数 - 详解
  • 2025年知名的粉煤灰选粉机行业内口碑厂家排行榜
  • 2025年口碑好的沙漏包装亚克力管用户好评厂家排行
  • 2025年质量好的远程可视监控智能门锁厂家推荐及选购指南
  • 2025年比较好的织锦软件功能对比与推荐排行榜
  • 2025年评价高的电梯改造品牌综合竞争力排行榜
  • 2025年知名的纺织培训人气机构权威推荐
  • 2025年口碑好的二段力五金铰链厂家推荐及采购参考
  • 2025年11月北京高考辅导机构权威榜:五强对比与客观排行一览
  • 1v1直播源码,css 实现直角三角形 - 云豹科技