c# - .NET 中的链接接缝

标签 c# .net unit-testing legacy-code

我最近刚读完 Michael Feathers 的书 Working Effectively with Legacy Code .这是一本关于如何有效地创建测试接缝并利用它们来测试现有代码的好书。

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

他给出的例子是用C++写的。我很好奇这种技术(或类似技术)是否可以在 .NET/C# 中实现?

最佳答案

是的,在 .Net 中是可能的。在最简单的情况下,您可以将一个程序集替换为另一个同名的程序集。

对于强命名程序集,您应该更改版本号,然后配置程序集绑定(bind)以覆盖编译时“链接”版本。这可以在企业、机器、用户或目录级别完成。

有一些与安全相关的注意事项。如果您希望替换的程序集已被强命名,那么您将需要在对程序集签名时重新创建相同的公钥。

换句话说,如果您作为应用程序开发人员不希望您的库被“模拟”(或者可能被恶意代码替换),那么您必须确保程序集已签名并且私钥不公开。

这就是您不能模拟 DateTime 的原因——因为 Microsoft 已经强烈命名了 .Net 的核心库。

关于c# - .NET 中的链接接缝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507483/

相关文章:

c# - 验证目标数据库架构是否符合 Entity Framework 中的内容?

c# - 在 TFS 中取消 "get latest version"是否有效?

c# - 何时使用多个类库?

php - 如何真正对 Symfony 表单进行单元测试?

c# - 后台 worker C# winform

c# - 如何将 SqlDateTime 值转换为 .Net::DateTime

javascript - 如果 J STD TestCase 方法被 RequireJS 包装,如何从命令行运行 JS 测试驱动程序?

c# - 单元测试服务和模拟自动生成的 WCF 客户端代理

c# - 业务库重用或公开服务

javascript - Model.Isvalid 在我的 MVC 4 应用程序中失败。如何解决这个问题?