.NET4能够更好地进行单元测试/模拟,因为它能够进行monkey补丁?

.NET4能够更好地进行单元测试/模拟,因为它能够进行monkey补丁?,.net,dynamic,.net-4.0,ironpython,.net,Dynamic,.net 4.0,Ironpython,考虑一下即将到来的实现 从理论上讲,这将允许猴子修补,对吗?无论好坏,都不重要。考虑到其他人的不可测试代码(至少很容易),dynamic关键字会允许它,不是吗?如果我读对了,这对C#和VB来说有很大的潜力 对此有何想法?在.Net 4中的动态类型支持并没有真正在整个CLR类型系统中为您提供完整的monkey补丁支持。它为您提供了另一种模拟对象的方法,但坦率地说,当前的方法非常好(请参见moq:) 对于动态类型,您将失去intellisense,因此可能会提出一个论点,即不建议使用动态进行模拟 I

考虑一下即将到来的实现

从理论上讲,这将允许猴子修补,对吗?无论好坏,都不重要。考虑到其他人的不可测试代码(至少很容易),dynamic关键字会允许它,不是吗?如果我读对了,这对C#和VB来说有很大的潜力


对此有何想法?

在.Net 4中的动态类型支持并没有真正在整个CLR类型系统中为您提供完整的monkey补丁支持。它为您提供了另一种模拟对象的方法,但坦率地说,当前的方法非常好(请参见moq:)

对于动态类型,您将失去intellisense,因此可能会提出一个论点,即不建议使用动态进行模拟

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

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


如果你想要猴子补丁,你需要适当的拦截,这是很难的。:

但是如果方法名称相同,肯定会使用IronPython的“mock”实现,这样你就可以补丁现有的代码了?这都是些夸张的东西,我还没有真正使用过.NET 4.0。如果你有一个容器(工厂),你可以用它来实例化,然后到处使用它来获取新的实例,并连接它来应用拦截,那么是的。但这需要大量的工作。另外,使用dynamic,您将失去intellisense,无法在编译时捕获琐碎的打字错误