4

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

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

谢谢!

4

2 回答 2

5

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

编写一组针对接口的“契约测试”,以您期望接口工作的方式。

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

  • 如果满足您的需要,请使用最后一个适配器/外观
  • 推出一个新的来修复任何重大变化;确保您针对合同测试运行它,以便您的客户端不会使用此适配器。
于 2010-05-14T06:33:12.257 回答
3

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

伪示例:

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

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

于 2010-05-14T06:39:18.663 回答