c# - 模拟框架如何工作?

标签 c# mocking implementation

大多数模拟框架只能模拟接口(interface),有些可以模拟类的虚拟方法。一些 Java 模拟框架甚至能够模拟静态类。

例如犀牛模拟:

var mock = MockRepository.GenerateMock<..>();

generate mock 方法中有什么“魔力”? C# 模拟框架不允许模拟静态类是有原因的吗?或者这只是一个“设计选择”?

最佳答案

研究这些框架的源代码并自己找到答案,其实是一件非常有趣和迷人的事情。 Rhino Mocks是开源的,以及Moqmany others .我绝对会推荐深入其中之一。

至于内部实现(来自 here ):

However, the framework can't mock non-virtual methods, so we'd need to make TouchIron method virtual. The reason for that lies deep inside: Rhino Mocks uses Castle Dynamic Proxy to handle proxying the types it needs to mock, and Dynamic Proxy cannot intercept calls to non-virtual, non-abstract methods.

关于c# - 模拟框架如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15486217/

相关文章:

c# - 是否可以在 Windows docker 容器中运行的 dotnet 核心应用程序中使用 EPPlus?

c# - boolean 类型

Python Mock - 模拟几个打开

JM引用软件中计算宏 block 之间的宏 block 差异(H.264实现)

algorithm - 有什么聪明的方法可以输出 n 个项目的列表,中间有 (n-1) 个分隔符?

c - readdir(3) 奇怪的行为 : finding non existing files in/dev/

c# - 找到的程序集的 list 定义与程序集引用不匹配

c# - DevExpress DXGrid 列标题双击事件

java - 模拟通用参数

python - 如何在 Python 的请求库中模拟 session ?