gpt4 book ai didi

python - 使用 Python 进行依赖测试

转载 作者:太空狗 更新时间:2023-10-30 00:04:08 26 4
gpt4 key购买 nike

我想编写单元测试来测试两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com