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

How to make python unit tests always find test data files when run from different working directories?

这是一个关于测试环境设置的问题。

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

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

1
f = open('test_data.ext', 'r')

我想用uu file_uuu使用一个与当前测试模块相关的路径,但是当调用u file_uuu的测试模块是单独运行时,这不起作用。

人们通常如何解决这个问题?


许多不同的方法浮现在脑海中:

  • 为数据目录设置环境变量
  • 编写一个始终导入的小模块,它的唯一目的是相对于数据目录有一个固定的位置,然后从那里调用__file__
  • 在运行时生成数据
  • 将数据存储在数据库而不是文件中
  • 将数据存储在文件系统中的固定位置,而不是相对于包的位置。
  • 不要直接运行测试代码
  • 最有意义的解决方案取决于您的环境、特定的数据和程序。


    我不确定这是您的完整解决方案,但对于Python中的单元测试,我总是使用Nose。它有一个极好的测试发现过程。你可以在这里找到它的机制。也许您也可以对Python的传统单元测试有所了解。

    py.test还使用了一种整洁的发现机制。