我目前正在用 python 开发一个库和一组使用这个库的程序。单元测试要求我从库中导入每个模块,并测试其中的类和例程。没问题。我有一个单独的测试目录,其中包含我的所有测试并导入库模块,我在开发时运行这些模块。
但是,在测试程序时,情况会发生变化。要进行测试,程序必须作为一个整体运行。程序假设找到已安装的库(如果我在我的机器上安装了它的早期版本,这实际上可能是这种情况,虽然是错误的,增加了更多的麻烦)。目前,我的程序由具有 PYTHONPATH 定义的测试套件运行,我在部署之前手动执行(IOW,我不执行安装),但我认为我做得不对。我觉得一般来说,一个程序应该在完全部署后进行功能测试,但这意味着我每次想要执行功能测试时都必须安装它。
您对整个程序的功能测试有何经验和建议?你是在部署之前还是之后做的,如何做?
谢谢
请注意,我没有故意包含 python 标记。虽然我的问题是特定于 python 的,并且我更喜欢与 python 相关的答案,但我认为也可以从其他语言的专家那里获得贡献。
编辑:正如评论中所报告的,事实是我的程序在安装时必须导入只有在部署时才能找到路径的模块(我动态下载并安装依赖项,它们没有安装在我的机器上)。我无法从测试中操作 sys.path,因为这意味着我从另一个程序(运行并产生 system() 调用的测试套件)修改程序(我的可执行文件)的 sys.path。
换句话说,我必须在不部署的情况下测试程序的唯一方法是执行程序,并将 PYTHONPATH 设置为包含 deps 和程序使用的库由 make 脚本安装的目录(正如我所说,下载、编译并将所有内容“安装”在临时目录中)。
在部署时,deps 和可执行文件被打包在一个类似“OSX 包”的结构中,该结构是完全可执行和可重定位的。
编辑:
添加了 150 赏金,看看我是否可以获得更多反馈。
编辑:
我感谢所有答案并投票赞成所有答案。这个选择对我来说是一个艰难的决定,但 LudoMC 让我想起了我很久以前研究过的 V 模型测试方法。感谢所有人提供的非常好的答案。