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

2024-01-17

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

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

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

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

我想过使用 __file__ 使用相对于当前测试模块的路径,但是这个当调用 __file__ 的测试模块单独运行时不起作用 https://stackoverflow.com/a/6416114/637325.

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


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

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

对您来说最有意义的解决方案取决于您的环境以及特定的数据和程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 python 单元测试在从不同工作目录运行时始终找到测试数据文件? 的相关文章

随机推荐

  • 提交 html 表单时提交

    元素的值

    我有这个代码 p class foo Text p 我还有一个表格
  • 获取图像来拉伸 div

    如何让图像拉伸高度DIV class 目前它看起来像这样 不过 我想要DIV被拉伸所以image适合 但我不想调整 图像 的大小 这是 CSSDIV 灰色框 product1 width 100 padding 5px margin 0px
  • 从 SPARQL 查询返回嵌套数据结构

    如果我有一个具有这种结构的图 prefix
  • Oracle 软件包的版本控制?

    幸运的是 我必须与 Oracle 合作 还有包裹 我有一个包 很多不同的开发人员都在接触它 这让我感到害怕 是否可以将包放入版本控制中 是否有某种软件已经可以做到这一点 如果没有 是否有某种出口程序 我可以从文件系统中抓取文件吗 他们如何输
  • getLocalAddress() 返回 0.0.0.0

    我正在尝试使用套接字编写程序 并且需要获取自己的本地 IP 地址 当我在套接字中使用 getLocalAddress 时 我只得到 0 0 0 0 这是我的一小段代码 DatagramSocket socket DatagramPacket
  • 删除asp mvc中的本地主机url

    只是在尝试正确显示来自外部站点的图像时遇到问题 但 mvc 约束链接并自动在所有内容的开头添加 localhost url 即使使用自定义路由 这也是无法避免的 例如我需要 www google com finance chart q NY
  • TouchID 在某些 iPhone 5S 设备上崩溃

    我的应用程序在某些 iPhone 5S 设备 仅部分 上崩溃并出现错误 致命异常 NSInternalInconsistencyException 意外错误 错误域 NSCocoaErrorDomain 代码 4097 该操作无法 完全的
  • Django - 编辑 HTML 表行并更新数据库

    我创建了一个 HTML 表 它包含一些信息 不过 我想添加编辑表行文本的可能性 并通过单击 保存 数据库将被更新 有人能帮我吗 我需要使用 Ajax 吗 如果是这样 我可以获得一些指导吗 table style width 100 tr t
  • python 版本如何影响 Azure Functions?

    I m 发展使用 Python 的 Azure 函数3 10 10在我的机器上 通过 Azure DevOps 部署该功能building使用 Python 的工件3 6 8 以及Python Version显示为功能应用程序host is
  • 在 Kotlin 中将 ByteArray 转换为 Base64

    我正在尝试在用 Kotlin 编写的 Spring 项目中将 ByteArray 转换为 Base64 我检查了现有的帖子 但它们对我没有帮助 实际上 我正在尝试将 blob 转换为 base 但到目前为止我已将 blob 转换为 byte
  • 如何使用 next-routes 处理 % 和 # 字符

    我在用下一个路线 https github com fridays next routes我的应用程序 URL 需要接收参数作为包含 和 字符的名称 例如 C 100 等 所以它的 URL 如下所示 https myapp com name
  • 重复的模式/结构化数据标记?

    这样的结构会不会有问题呢
  • Libgdx 使用 TiledMap 进行碰撞检测

    我正在努力通过平铺地图实现碰撞检测系统 我有一个 2d 口袋妖怪风格 游戏 渲染了平铺地图 具体来说 我的平铺地图 tmx 文件中有一个 碰撞 层 我想与玩家和其他实体进行交互 我的问题是如何将玩家精灵 扩展精灵类 连接到平铺地图的 碰撞
  • 从 C++11 中的函数返回元组的最佳方法是什么?

    我想从函数返回一些值 并且想将其打包在一个元组中 所以我有两种函数声明的可能性 std tuple
  • 如何调试使用 boost 的代码而不失去理智?

    Boost 是一组很棒的库 它确实boosts生产率 但是调试使用它的代码完全是一场噩梦 当然 逐步浏览两万个头文件可能是一项有价值的智力练习 但如果您需要一遍又一遍地这样做怎么办 是否有一种对开发人员友好的方法来跳过升压部分并让调试器直接
  • 为什么 ml_create_dummy_variables 在 Sparklyr 中不显示新的虚拟变量列

    我正在尝试在 Sparklyr 中创建模型矩阵 有一个功能ml create dummy variables 用于一次为一个分类变量创建虚拟变量 据我所知 没有 model matrix 等效于一步创建模型矩阵 很容易使用ml create
  • 添加/删除 UIBarButtonItem 的 EventHandler

    人们可以定义一个EventHandler在构造函数中 UIBarButtonItem logoutButton new UIBarButtonItem UIBarButtonSystemItem Stop logoutButtonEvent
  • PhantomJS .click() 不起作用

    此代码不起作用 var page require webpage create page open http www ebay com function console log Page loaded page includeJs http
  • Web Speech API 中语法的效果

    在 Web Speech API 的示例中 始终指定语法 例如 在MDN 的颜色变化示例 https github com mdn web speech api blob master speech color changer script
  • 如何使 python 单元测试在从不同工作目录运行时始终找到测试数据文件?

    这是一个关于测试环境设置的问题 在我的项目中 我有一些访问测试数据文件的单元测试 这些单元测试可以通过测试运行器从我的项目目录运行 或者 我可以单独运行每个测试文件 模块 例如出于调试目的 问题是 根据我运行测试的位置 当前目录是不同的 因