【问题标题】:How to unit test my project against different versions of external dll api?如何针对不同版本的外部 dll api 对我的项目进行单元测试?
【发布时间】:2010-05-14 06:23:58
【问题描述】:

我正在开发一个严重依赖外部 dll 的应用程序,我的应用程序需要支持新版本的 dll 以及向后兼容旧版本。

有没有什么好的方法可以让我的单元测试针对所有这些不同的 dll 版本,而无需在新版本的 api 发布后立即重写测试?如何最好地处理?

谢谢!

【问题讨论】:

    标签: c# unit-testing testing nunit mbunit


    【解决方案1】:

    编写一个包装外部 DLL 的适配器或外观。让它实现一个接口 IExternalDLL (当然选择一个更好的名字),它记录/指定您对外部 DLL 的需求;它不必完全模仿实际实现的函数签名。

    针对接口编写一组“合同测试”,按照您期望接口工作的方式。

    现在您可以为每个新版本编写不同的适配器 - 以防从 v1 到 v2 发生一些重大更改。您的客户端由于接口而被抽象。适配器/外观的工作是确保相应版本的 dll 符合合同测试。您编写一组测试并使用适配器/外观的所有实现来练习它。 下次推出新版本时 - 您可以

    • 如果满足您的需要,请使用最后一个适配器/外观
    • 推出新的以修复任何重大更改;确保您针对合同测试运行它,这样您的客户端就不会破坏此适配器。

    【讨论】:

      【解决方案2】:

      如果您使用的是 nant、team build 或类似工具,您可以在运行测试之前将 lib 二进制文件 xcopy 到您的测试项目从中获取其二进制文件的文件夹中。

      伪例子:

      1. 将“旧版本”复制到二进制文件夹
      2. 运行测试(CI 系统中的测试任务)
      3. 将“新版本”复制到二进制文件夹
      4. 运行测试 5 ..

      这很简单,应该很容易尝试。注意:“编写适配器或外观”答案是使您的程序针对不同版本工作的首选方式,所以也这样做,我只是在谈论针对多个版本进行实际测试。

      【讨论】:

      • 如果我能选择两个帖子作为正确答案,那就太好了,因为它们相互补充:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      相关资源
      最近更新 更多