如何针对不同版本的外部dll api对我的项目进行单元测试?

时间:2010-05-14 06:23:58

标签: c# unit-testing testing nunit mbunit

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

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

谢谢!

2 个答案:

答案 0 :(得分:5)

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

针对界面编写一组“合同测试”,以及您希望界面工作的方式。

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

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

答案 1 :(得分:3)

如果您正在使用nant,团队构建或类似程序,则可以将lib二进制文件xcopy运行到测试项目从运行测试之前获取其二进制文件的文件夹。

伪示例:

  1. 将“旧版本”复制到二进制文件夹
  2. 运行测试(CI系统中的测试任务)
  3. 将“新版本”复制到二进制文件夹
  4. 运行测试 5 ..
  5. 这很简单,应该很容易尝试。注意:“编写适配器或外观”的答案是使您的程序针对不同版本工作的首选方式,所以这样做,我只是在谈论实际测试多个版本。