当前位置: 首页 > 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://www.zskr.cn/news/50679.html

相关文章:

  • 第4章 AI项目管理新范式:从交付功能到交付价值
  • C++ QT_数据转换(数值、QString、QByteArray、结构体)
  • 第3章 传统项目管理在AI中的局限
  • multisim 13 Problem: Accessing the database解决办法
  • AI元人文框架:意义世界的探索引擎
  • abc432
  • 20232310 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 公告栏
  • 生物化学课程笔记
  • PELT算法浅析
  • hippy字节都在用的前端主流框架
  • springboot多模块报错分析(一) - f
  • 身为大厂前端的你,不能不知道Babel + Polyfill!
  • 2025.11.15博客
  • 实用指南:PyTorch DataLoader 高级用法
  • ESP32 I2S音频总线学习笔记(八):添加按键控制功能 - 详解
  • 2025年8款AI论文写作神器推荐:轻松搞定毕业论文查重
  • 基于python的酒店管理系统_36rhk752(Pycharm Flask Django成品源码LW) - 详解
  • 中级前端工程师详细技能清单
  • 航运、应急、工业适用,AORO P1100三防平板引领行业数字化变革 - 详解
  • 为什么高手写 CSS 都偏爱 rem?这三大优势无法拒绝
  • 完整教程:FPGA 49 ,Xilinx Vivado 软件术语解析(Vivado 界面常用英文字段详解,以及实际应用场景和注意事项 )
  • WPF中RelayCommand的完成与使用详解
  • Python 潮流周刊#127:Python 3.16 JIT 性能提升计划
  • 2025年目前品质好的羊毛地毯厂家推荐
  • 基础设施即服务(IaaS)全面解析:云计算的基石
  • Golang游戏开发笔记:地图索引系统实现
  • 完整教程:《简易制作 Linux Shell:详细分析原理、设计与实践》
  • 计算机网络5 - 指南
  • 2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!