Der*_*wok 6 python django dependencies unit-testing
我想编写单元测试来测试两个python包之间是否存在依赖关系.例如:
a/
__init__.py
models.py
views.py
...
b/
__init__.py
models.py
views.py
...
Run Code Online (Sandbox Code Playgroud)
单元测试,检查包中的模块是否从包中的模块b导入任何内容a.到目前为止,我唯一的解决方案是扫描文件并检查源代码中是否没有"from a"或"import a".还有其他方法吗?其中一个要求是,a/并且b/必须位于相同的目录级别.
我想有这个单元测试,因为我想确保我可以b在没有包的其他项目中使用包a,也没有其他开发人员编写将b依赖的代码a.
Python 过于动态,无法 100% 正确地完成此操作。考虑一下,您可以通过调用 来导入模块__import__,它接受一个字符串参数,以便可以在运行时构造要导入的模块的名称。另外,__import__是一个函数,因此它可以绑定到其他名称,因此您甚至无法确定在导入某些内容时检测到所有情况。
从技术上讲,一个模块可以调用另一个模块的函数,该模块导入一个模块并返回它。所以你绝对不能通过仅分析 package 来做到这一点b。
然后执行exec在运行时构造的任意Python代码......
您能得到的最接近的结果可能是尝试b在a位于 上PYTHONPATH以及a不在 上时进行单元测试练习PYTHONPATH。仍然不是万无一失的,因为这只是告诉您在没有 的情况下b完成了所有测试,而不是它不需要任何东西。如果你真的很不幸,会做一些非常愚蠢的事情并在飞行中摆弄并以某种方式设法导入。aPYTHONPATHabsys.patha
但是,如果这都是您自己的代码,并且您知道自己不会做这种古怪的废话,那么扫描文件中的语句的简单脚本import可能是您最好的选择。它也可能经常在随机的其他人的代码上工作。完全通用地完美地完成这项工作是不可能的。
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |