我们正在开发在 AutoCAD 中使用的应用程序。
基本上我们创建一个类库项目,并使用命令 (NETLOAD) 在 AutoCAD 中加载 .dll。
因此,我们可以使用命令、“调色板”、用户控件、表单等......
AutoDesk 通过在其程序目录中运行的某些 dll 提供 API。
引用这些 dll 时,您只能在运行时在 AutoCAD 中加载应用程序时调用 dll(这是 AutoDesk 的许可安全性)。
对我们来说,在开发过程中,这不是问题,我们需要在 AutoCAD 的上下文中进行可视化测试,所以我们只需设置 Debug Properties 以便它们启动 acad.exe 并在 acad.exe 参数中使用脚本加载我们的 dll .
问题是,当尝试对我们的代码进行单元测试时,NUnit 或 mstest 没有在 AutoCAD 上下文中运行,它们也无法启动它。
有一个叫做 Gallio 的工具,它提供了一个与 AutoCAD 的接口(interface),因此它可以通过带有命名管道的 IPC 运行单元测试。
然而,这个解决方案对我来说太麻烦了。我希望能够快速编写测试而不必离开我心爱的 IDE。
那么,从“好的设计观点”来看,什么是解决这个问题的好方法?我想我基本上需要一个不引用 AutoCAD dll 的可测试代码库和一个引用不可测试的 AutoCAD dll 的不可测试代码库。
我确信有办法让它发挥作用:(IOC、DI、适配器模式……)我只是没有深入了解这些原则,因此我不知道哪条路线最适合我的目的和目标。
最佳答案
第一步是对需要 AutoCAD 的部件和真正独立的部件的代码进行分类。像往常一样为独立部分创建单元测试。
对于其他部分,您需要行为类似于 AutoCAD 的模型。使它们尽可能简单(例如,只在方法中返回正确答案而不进行任何计算)。现在,您需要几组类:
boolean loadDrawing(File filename)
, 创建一个返回 true
的模型对于文件名 exists.dxf
和 false
对于其他任何事情。 关于unit-testing - 在第三方软件 API (AutoCAD) 上进行单元测试的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536895/