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

C# 如何针对不同版本的外部dll api对我的项目进行单元测试?,c#,unit-testing,testing,nunit,mbunit,C#,Unit Testing,Testing,Nunit,Mbunit,我正在开发一个严重依赖外部dll的应用程序,我的应用程序需要支持dll的新版本,并与旧版本向后兼容 有什么好方法可以让我的单元测试针对所有这些不同的dll版本,而不需要在api的新版本发布后立即重写测试?如何最好地处理这个问题 谢谢 编写封装外部DLL的适配器或外观。让它实现一个接口IExternaldl(当然选择一个更好的名称),它从外部DLL记录/指定您的需求;它不必完全模仿实际实现的函数签名 针对接口编写一组“契约测试”,这是您期望接口工作的方式 现在,您可以为每个新版本编写不同的适配器,

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

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


谢谢

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

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

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

  • 如果满足您的需要,请使用最后一个适配器/外观
  • 推出一个新的,以解决任何突破性的变化;确保您在契约测试中运行它,以便您的客户端不会与此适配器断开

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

伪示例:

  • 将“旧版本”复制到二进制文件夹
  • 运行测试(CI系统中的测试任务)
  • 将“新版本”复制到二进制文件夹
  • 运行测试 五,

  • 这非常简单,应该很容易尝试。注意:“编写适配器或facade”答案是让您的程序在不同版本下工作的首选方法,所以也要这样做,我只是说实际测试多个版本。

    如果我可以选择这两篇文章作为正确答案,因为它们相互补充,那就太好了:(