Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python进行依赖性测试_Python_Django_Unit Testing_Dependencies - Fatal编程技术网

用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/必须位于同

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

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
是一个函数,因此它可以绑定到其他名称,因此您甚至无法确保在导入某些内容时检测到所有情况

从技术上讲,一个模块可以从另一个模块调用一个函数,这个模块导入一个模块并返回它。因此,仅通过分析package
b
是无法做到这一点的

然后还有
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