2010-03-24 55 views
6

我刚刚完成了Michael Feathers的书Working Effectively with Legacy Code。这是一本关于如何有效创建测试接口并利用它们来获取现有代码的好书。.NET中的链接接缝

他谈论的技术之一是使用“链接接缝”。基本上这个想法是,如果你有代码依赖于另一个库,你可以使用链接器插入一个不同的库进行测试,而不是生产。这可以让你通过模拟库感知测试条件,或者避免调用具有真实世界效果的库(数据库,电子邮件等)等。

他给出的例子是用C++编写的。我很好奇,如果这种技术(或类似的)可能在.NET/C#中?

+1

请注意,当所有其他失败时,这应该是最后的手段。如果它被过度使用,在某一点之后,你可能会失去跟踪你在哪里使用的库,这可能会导致测试和生产中的细微错误。 – 2010-03-24 12:20:04

+0

哦,我绝对同意。而TBH我不确定我会永远使用它。我更感兴趣的是,如果它甚至可能在.NET堆栈上。 – RationalGeek 2010-03-24 12:25:20

回答

4

是的,它是可能的.NET。在最简单的情况下,可以用另一个相同名称替换一个程序集

对于强命名的程序集,应该更改版本号,然后配置程序集绑定以覆盖编译时间“链接”版本。企业,机器,用户或目录级别。

有一些警告,与安全有关。如果您希望替换的程序集已被强烈命名,则需要在签署程序集时重新创建相同的公钥。换句话说,如果您作为应用程序开发人员不希望您的库“嘲弄”(或者用恶意代码替代),那么您必须确保程序集已签名且私钥不公开。

这就是为什么你不能嘲笑DateTime - 因为微软强烈命名了.Net的核心库。