讲师中心 微信公众号
AI工具推荐 视频效率加速

C# Fakes框架使用方法 C#如何使用Microsoft Fakes进行隔离测试

千涛同学_1100

千涛同学_1100

发布时间:2026-02-15 10:22:03

|

195人浏览过

|

来源于php中文网

原创

Fakes是仅适用于.NET Framework 4.0+的隔离测试框架,依赖VS IDE生成FakesAssemblies,不支持.NET Core/5+及VS 2022,现已淘汰;推荐改用Moq+DI等现代方案。

c# fakes框架使用方法 c#如何使用microsoft fakes进行隔离测试

什么是Fakes,它现在还能用吗 Fakes 是 Microsoft 为 .NET Framework(仅限)提供的轻量级隔离测试框架,核心是生成 FakesAssemblies,把对 System、mscorlib 或第三方程序集的调用重定向到可自定义行为的委托。但它**仅支持 .NET Framework 4.0+,不支持 .NET Core / .NET 5+**。Visual Studio 2019 是最后一个提供完整 Fakes 设计器支持的版本;VS 2022 已完全移除 Fakes 项目模板和右键“Add Fakes Assembly”菜单。

如果你正在用 .NET 6+ 或跨平台开发,Microsoft.Fakes 不可用——不是配置问题,而是根本没实现。别浪费时间查“为什么 Fakes 不生成”或“如何在 SDK 风格项目中启用”,答案统一:不能。

在 .NET Framework 项目中启用 Fakes 的关键步骤 Fakes 不是 NuGet 包,也不靠 dotnet test 驱动,它依赖 VS IDE 的专有生成逻辑和特定项目结构:
  • 必须使用传统 .csproj(即非 SDK 风格),且目标框架为 net472 或更高(但 ≤ net48)
  • 测试项目需引用待测程序集(.dll),右键该引用 → “Add Fakes Assembly” → VS 自动生成 xxx.Fakes 子文件夹和 .fakes 配置文件
  • 生成后,项目自动添加对 Microsoft.QualityTools.Testing.Fakes 的引用,并在编译时调用 fakes.exe 工具生成桩类型(如 ShimDateTime、StubIList<T>)
  • 务必在测试方法上标注 [TestMethod] 且类标记 [TestClass];Fakes 上下文只在 MSTest v2(Microsoft.VisualStudio.TestTools.UnitTesting)中有效

常见失败现象:CS0246 未能找到类型“ShimDateTime” —— 多半是没成功生成 Fakes 程序集,或项目 SDK 风格被误改;检查 obj\Fakes 目录是否存在生成的 .dll 和 .pdb。

Shim 和 Stub 的区别与典型用法 Fakes 提供两类桩类型:Shim(针对静态/非虚成员,如 DateTime.Now、File.ReadAllText)和 Stub(针对接口或虚方法,需传入实现):
  • Shim 必须在 ShimsContext.Create() 作用域内使用,离开即失效;它修改的是 IL 调用点,线程局部生效
  • Stub 是运行时对象替换,无需上下文,但只能用于可被继承/实现的成员(如 IRepository 接口)
  • 避免在 Shim 中捕获异常后吞掉——它会干扰原始调用链;应明确 ShimXXX.BehaveAsNotImplemented() 或抛出自定义异常

示例:拦截 DateTime.Now

Outlook Calendar & Microsoft 365
Outlook Calendar & Microsoft 365

Outlook 日历 / Microsoft 365 日历 SECURE API CLI。当用户需要列出、搜索或读取 Outlook / Microsoft 365 日历事件,以及创建……

下载
using (ShimsContext.Create())
{
    ShimDateTime.NowGet = () => new DateTime(2020, 1, 1);
    Assert.AreEqual(new DateTime(2020, 1, 1), DateTime.Now);
}

注意:ShimDateTime 类型由 Fakes 自动生成,命名规则是 Shim + 原类型名;属性访问器需写成 NowGet(而非 get_Now)。

为什么现在更推荐 Moq + Microsoft.Extensions.DependencyInjection Fakes 的强耦合性带来几个硬伤:fakes.exe 生成慢、调试符号难追踪、无法用于 CI(因依赖 VS 安装)、不支持 async 成员桩(ShimTask 无可靠行为)。而现代替代方案更直接:
  • 用 Moq 模拟接口(如 IMemoryCache、IHttpClientFactory),配合 ServiceCollection 替换服务,覆盖 80%+ 场景
  • 对 DateTime 等基础类型,封装为 IDateTimeProvider 接口再注入,比 Shim 更易测、更清晰
  • 对 File、Registry 等系统 IO,改用内存实现(如 InMemoryDatabase、MemoryStream)或抽象为服务

Fakes 的唯一不可替代场景只剩:必须在不改源码前提下,临时劫持某个 .NET Framework 内部静态方法(如 Assembly.GetExecutingAssembly())——但这类需求本身已属反模式,长期维护成本极高。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3108

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4649

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3729

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

426

2026.01.19

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3938

2023.08.10

vscode和visualstudio的区别
vscode和visualstudio的区别

Visual Studio是一款功能强大的集成开发环境(IDE),适用于专业开发人员进行复杂项目的构建。而VSCode则是一款轻量级的代码编辑器,更适合各种规模的项目开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

1116

2024.03.15

vscode和visualstudio对比分析
vscode和visualstudio对比分析

VSCode是一款轻量级代码编辑器,界面简洁,支持广泛的编程语言,适合个人开发者和小团队。而Visual Studio是一款全功能IDE,界面复杂但功能丰富,适合大型项目开发和团队协作,特别是面向.NET开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2072

2024.04.01

vsd文件打开方法
vsd文件打开方法

vsd文件打开方法有使用Microsoft Visio软件、使用Microsoft Visio查看器、转换为其他格式等。想了解更多vsd文件相关内容,可以阅读本专题下面的文章。

1262

2023.10.30

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

0

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Microsoft Copilot官方手册
Microsoft Copilot官方手册

共0课时 | 0人学习

C# 教程
C# 教程

共94课时 | 22.1万人学习

ASP教程
ASP教程

共36课时 | 49.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn