python - 使用 Python 进行依赖测试

标签 python django unit-testing dependencies

我想编写单元测试来测试两个 python 包之间是否存在依赖关系。例如:

a/
    __init__.py
    models.py
    views.py
    ...
b/
    __init__.py
    models.py
    views.py
    ...

一个单元测试,用于检查 b 包中的模块不会从 a 包中的模块导入任何内容。到目前为止,我唯一的解决方案是扫描文件并检查源代码中是否没有“from a”或“import a”。还有其他方法吗?其中一个要求是 a/b/ 必须在同一目录级别。

我想进行这个单元测试,因为我想确保我可以在没有包 a 的其他项目中使用包 b,并且没有其他开发人员编写使 b 依赖于 a 的代码。

最佳答案

Python 过于动态,无法 100% 正确地执行此操作。考虑到您可以通过调用 __import__ 来导入模块,它采用字符串参数,因此可以在运行时构造要导入的模块的名称。此外,__import__ 是一个函数,因此它可以绑定(bind)到其他名称,因此您甚至无法确定是否检测到正在导入某物 的所有情况。

从技术上讲,一个模块可以从另一个模块调用一个函数,该模块导入一个模块并返回它。所以你绝对不能通过只分析包b来做到这一点。

然后是 exec 来执行在运行时构造的任意 python 代码...

a 位于 PYTHONPATH 上时,您最接近的可能是尝试进行单元测试练习 b,并且当a 不在 PYTHONPATH 上。仍然不是万无一失的,因为它只告诉你 bPYTHONPATH 上没有 a 的情况下完成了所有测试,而不是它永远不需要a 代表任何东西。如果你真的不走运,b 会做一些非常愚蠢的事情,并在飞行中摆弄 sys.path 并设法以某种方式导入 a

但是,如果这都是您自己的代码,并且您知道自己不会做这种古怪的废话,那么扫描文件以查找 import 语句的简单脚本可能是您最好的选择赌注。它也可能经常在其他人的随机代码上工作。完全通用地完美地完成工作是不可能的。

关于python - 使用 Python 进行依赖测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406707/

相关文章:

python - 简化 Python 中的 for 循环

python - 使用带有格式化字符串的Python exec() 函数?

python - 具有阈值的图像曲面图

django 关键字不能是表达式

visual-studio - Visual Studio 解决方案文件中的多个测试程序集

c# - asp.net单元测试: Mark test as incomplete

unit-testing - 如何在 Grails/Spock 中模拟 HttpServletRequest 的 BufferedReader 负载

Python加载旧版本的sklearn

python - 任务 Celery 中的 RuntimeError : Never call result. get()

python - Spotify API {'error' : 'invalid_client' } Authorization Code Flow [400]