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