当前位置: 首页 > 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.jsqmd.com/news/41341/

相关文章:

  • DAY1 JAVA PreLearning
  • 【服务器】服务器被攻击植入了挖矿病毒,CPU一直占用100%,@monthly /root/.cfg/./dealer病毒清除 - 实践
  • 动态规划实践:数字三角形问题分析
  • 第4章 AI项目管理新范式:从交付功能到交付价值
  • 牛客101:链表 - 教程
  • LNCPC 2025 游寄
  • 第3章 传统项目管理在AI中的局限
  • Python 异常处理全面详解(附丰富实例)
  • IServiceCollection和IServiceProvider
  • multisim 13 Problem: Accessing the database解决办法
  • 完整教程:Redis 事务机制:Pipeline、ACID、Lua脚本
  • Python 一维数据、二维数据及 CSV 文件操作全解析(附实例)
  • 银行核心账户体系、账务设计、会计核心(整合版)
  • 斐波那契数列相关恒等式
  • Python 文件操作全面详解:从基础到进阶(附丰富实例)
  • 银行中外汇的由来(金融产品经理必读)
  • AI元人文框架:意义世界的探索引擎
  • abc432
  • 20232310 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 实用指南:开源 Linux 服务器与中间件(七)数据库--MySQL
  • 版本控制与GitLab完整实践指南 - 指南
  • 利用Myo臂环采集肌电信号和角速度来建立实时手势识别
  • [MySQL] 基础操控
  • 公告栏
  • 做题笔记25
  • 云服务器部署Python后端偶遇`ImportError`: 从依赖版本到Python升级的排错全攻略 - 实践
  • 生物化学课程笔记
  • 20251115 - Hash
  • apache和nginx解析php和lnmp和lamp搭建
  • hippy字节都在用的前端主流框架