【发布时间】:2010-05-14 06:23:58
【问题描述】:
我正在开发一个严重依赖外部 dll 的应用程序,我的应用程序需要支持新版本的 dll 以及向后兼容旧版本。
有没有什么好的方法可以让我的单元测试针对所有这些不同的 dll 版本,而无需在新版本的 api 发布后立即重写测试?如何最好地处理?
谢谢!
【问题讨论】:
标签: c# unit-testing testing nunit mbunit
我正在开发一个严重依赖外部 dll 的应用程序,我的应用程序需要支持新版本的 dll 以及向后兼容旧版本。
有没有什么好的方法可以让我的单元测试针对所有这些不同的 dll 版本,而无需在新版本的 api 发布后立即重写测试?如何最好地处理?
谢谢!
【问题讨论】:
标签: c# unit-testing testing nunit mbunit
编写一个包装外部 DLL 的适配器或外观。让它实现一个接口 IExternalDLL (当然选择一个更好的名字),它记录/指定您对外部 DLL 的需求;它不必完全模仿实际实现的函数签名。
针对接口编写一组“合同测试”,按照您期望接口工作的方式。
现在您可以为每个新版本编写不同的适配器 - 以防从 v1 到 v2 发生一些重大更改。您的客户端由于接口而被抽象。适配器/外观的工作是确保相应版本的 dll 符合合同测试。您编写一组测试并使用适配器/外观的所有实现来练习它。 下次推出新版本时 - 您可以
【讨论】:
如果您使用的是 nant、team build 或类似工具,您可以在运行测试之前将 lib 二进制文件 xcopy 到您的测试项目从中获取其二进制文件的文件夹中。
伪例子:
这很简单,应该很容易尝试。注意:“编写适配器或外观”答案是使您的程序针对不同版本工作的首选方式,所以也这样做,我只是在谈论针对多个版本进行实际测试。
【讨论】: