用Python进行依赖性测试
我想编写单元测试来测试两个python包之间是否存在依赖关系。例如:用Python进行依赖性测试,python,django,unit-testing,dependencies,Python,Django,Unit Testing,Dependencies,我想编写单元测试来测试两个python包之间是否存在依赖关系。例如: a/ __init__.py models.py views.py ... b/ __init__.py models.py views.py ... 用于检查包b中的模块是否未从包a中的模块导入任何内容的单元测试。到目前为止,我唯一的解决方案是扫描文件并检查源代码中是否有“froma”或“import a”。还有其他的方法吗?其中一个要求是a/和b/必须位于同
a/
__init__.py
models.py
views.py
...
b/
__init__.py
models.py
views.py
...
用于检查包b
中的模块是否未从包a
中的模块导入任何内容的单元测试。到目前为止,我唯一的解决方案是扫描文件并检查源代码中是否有“froma”或“import a”。还有其他的方法吗?其中一个要求是a/
和b/
必须位于同一目录级别
我想进行这个单元测试,因为我想确保我可以在没有包
a
的其他项目中使用包b
,也不让其他开发人员编写会使b
依赖于a的代码,Python太过动态,无法100%正确地做到这一点。考虑到您可以通过调用 SyIpjix<<代码>导入模块,它采用字符串参数,以便在运行时构建要导入的模块的名称。另外,\uuuuuu import\uuuuu
是一个函数,因此它可以绑定到其他名称,因此您甚至无法确保在导入某些内容时检测到所有情况
从技术上讲,一个模块可以从另一个模块调用一个函数,这个模块导入一个模块并返回它。因此,仅通过分析packageb
是无法做到这一点的
然后还有exec
来执行运行时构造的任意python代码
当a
在PYTHONPATH
上时,以及当a
不在PYTHONPATH
上时,您可能会尝试进行单元测试练习b
。仍然不是万无一失的,因为这只是告诉您,b
在PYTHONPATH
上完成了所有测试,而没有a
,这并不是说它不需要a
做任何事情。如果你真的很不走运,b
会做一些非常愚蠢的事情,在飞行中摆弄sys.path
,并设法以某种方式导入a
但是,如果这都是您自己的代码,并且您知道您不会做这种古怪的废话,那么一个简单的脚本扫描文件以查找import
语句可能是您最好的选择。它可能也经常在随机的其他人的代码上工作。完全笼统地完成这项工作是不可能的
import sys
sys.modules['a'] = None
import b
# run unit tests for b to try and catch local import statements in b's functions