大多数模拟框架只能模拟接口(interface),有些可以模拟类的虚拟方法。一些 Java 模拟框架甚至能够模拟静态类。
例如犀牛模拟:
var mock = MockRepository.GenerateMock<..>();
generate mock 方法中有什么“魔力”? C# 模拟框架不允许模拟静态类是有原因的吗?或者这只是一个“设计选择”?
最佳答案
研究这些框架的源代码并自己找到答案,其实是一件非常有趣和迷人的事情。 Rhino Mocks是开源的,以及Moq和 many 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/