我刚刚完成了 Michael Feathers 的著作《有效地使用遗留代码》。这是一本关于如何有效地创建测试接缝并利用它们来测试现有代码的好书。
他谈到的其中一项技术是使用“链接接缝”。基本上这个想法是,如果你的代码依赖于另一个库,你可以使用链接器插入一个不同的库进行测试而不是生产。这将允许您通过模拟库感知测试条件,或避免调用具有真实世界影响的库(数据库、电子邮件等)等。
他给出的例子是用 C++ 编写的。我很好奇这种技术(或类似的东西)在.NET/C#中是否可行?
我刚刚完成了 Michael Feathers 的著作《有效地使用遗留代码》。这是一本关于如何有效地创建测试接缝并利用它们来测试现有代码的好书。
他谈到的其中一项技术是使用“链接接缝”。基本上这个想法是,如果你的代码依赖于另一个库,你可以使用链接器插入一个不同的库进行测试而不是生产。这将允许您通过模拟库感知测试条件,或避免调用具有真实世界影响的库(数据库、电子邮件等)等。
他给出的例子是用 C++ 编写的。我很好奇这种技术(或类似的东西)在.NET/C#中是否可行?
是的,在.Net 中是可能的。在最简单的情况下,您可以将一个程序集替换为另一个同名的程序集。
对于强命名程序集,您应该更改版本号,然后配置程序集绑定以覆盖编译时“链接”版本。这可以在企业、机器、用户或目录级别完成。
有一些与安全相关的警告。如果您希望替换的程序集已被强命名,那么您将需要在签署程序集时重新创建相同的公钥。
换句话说,如果您作为应用程序开发人员不希望您的库被“模拟”(或者可能被恶意代码替换),那么您必须确保程序集已签名并且私钥不公开。
这就是你不能模拟 DateTime 的原因——因为微软强烈命名了 .Net 的核心库。
这听起来有点像Typemock 隔离器提供的东西,特别是它们声称能够删除和模拟现有类型。但我从来没有用过它;-(
举个例子,DateTime.Now
不应该是可嘲笑的,对吧?
替代文字 http://site.typemock.com/storage/feature-images/dateTime.png?__SQUARESPACE_CACHEVERSION=1252774490561