由于猴子补丁的能力,.NET 4 可以实现更好的单元测试/模拟?

标签 .net dynamic .net-4.0 ironpython

考虑一下即将到来的Iron Python实现。

理论上它会允许猴子修补,对吧?好或坏,都不重要。给定其他人的不可测试代码(至少很容易),dynamic 关键字将允许 monkey patching不会吗?如果我没看错的话,这对于 C# 和 VB 来说具有巨大的潜力。

对此有何想法?

最佳答案

.Net 4 中的动态类型支持并没有真正为您提供跨 CLR 类型系统的完整猴子修补支持。它为您提供了另一种模拟对象的方法,但坦率地说,当前的方法非常好(请参阅最小起订量:http://code.google.com/p/moq/)

使用动态类型,您会失去智能感知,因此可以提出一个论点,即不建议使用动态类型进行模拟。

IronPython 风格的拦截将允许您用自己想要的行为包装现有对象,但它不允许您告诉框架修补所有 Foo 对象(从此时开始),因此 Bar 方法将调用 Bar2而不是酒吧。

请记住,IronRuby 和 IronPython 有 2 个独立的类型系统在发挥作用,即底层 CLR 类型系统和 IronRuby/IronPython 类型系统,当它们调用 C# 代码时,会进行编码。因此,尽管 IronRuby/IronPython 可以正确地修补自己的类型系统,但它们不能使用相同的机制来修补 CLR 类型系统。

如果你想要猴子补丁,你需要适当的拦截,这很难:Dynamic interception of calls in .NET

关于由于猴子补丁的能力,.NET 4 可以实现更好的单元测试/模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855242/

相关文章:

c# - 如何在另一个旁边显示动态创建的 DIV?

javascript - 使动态创建的下拉菜单与初始下拉菜单中的 Vue 模型中的值匹配

c# - 如何使用 DataContractJsonSerializer 序列化包含日期和时间属性的 JSON 字符串?

.net - 使用Assembly.LoadFrom的loadFromRemoteSources错误

c# - Unity RegisterType 用于本身接受服务的构造函数

c# - 当我们将其长度设置为零时,Stringbuilder 的 Capacity 属性真的很重要吗?

c# - 从另一个刚刚编译的程序集编译程序集

javascript - 在没有服务器端编码的情况下将动态 URL 字段传递到 iframe

listview - 动态在可折叠/分隔符内创建 ListView

.net - C# .NET 任务 : How to get notification when multiple tasks have completed