如何使python单元测试总是在从不同的工作目录运行时找到测试数据文件?

ptr*_*ico 19 python unit-testing

这是关于测试环境设置的问题.

在我的项目中,我有一些访问测试数据文件的单元测试.这些单元测试可以通过测试运行器从我的项目目录运行.或者我可以单独运行每个测试文件/模块,例如用于调试目的.

问题是,根据我运行测试的位置,当前目录是不同的.因此,当从项目目录运行这些文件时,打开一个测试数据文件,如下所示,通过提供相对于当前目录的路径将不起作用,因为测试数据文件不在该目录中.

f = open('test_data.ext', 'r')
Run Code Online (Sandbox Code Playgroud)

我想使用__file__来使用相对于当前测试模块的路径,但是当调用__file__的测试模块是单独运行的模块时,这不起作用.

人们一般如何解决这个问题?

Sil*_*Ray 8

我想到了许多不同的方式:

  1. 为数据目录设置环境变量
  2. 编写一个总是导入的小模块,其唯一目的是相对于数据目录具有固定位置,然后__file__从那里调用
  3. 在运行时生成数据
  4. 将数据存储在数据库而不是文件中
  5. 将数据存储在文件系统中的固定位置,而不是相对于包的位置
  6. 不要直接运行测试代码

最适合您的解决方案取决于您的环境以及您的特定数据和程序.