有没有一种方法可以对使用的导入进行单元测试?
有没有一种方法可以对 Python 文件中导入的模块进行单元测试(有点像 Java 中的 ArchUnit)?背景是实现六边形架构并希望确保域模型不会导入驻留在适配器中的任何代码。如果存在禁止的导入,我希望单元测试失败。
例如,我可能想测试 foo.bar.domain
中没有模块从 foo.bar.adapter
导入任何内容。应允许从 foo.bar.adapter
内导入 foo.bar.domain
。
这在 Python 中可行吗?实现这一目标的最佳方法是什么?
Is there a way of unit testing what modules are imported in a Python file (a bit like ArchUnit in Java)? The context is in implementing a hexagonal architecture and wanting to ensure that the domain model does not import any code that resides in an adapter. I'd like unit tests to fail if there are forbidden imports.
For example, I might like to test that no modules within foo.bar.domain
import anything from foo.bar.adapter
. Imports of foo.bar.domain
should be allowed from within foo.bar.adapter
.
Is this possible in Python and what's the best way of achieving this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
-Ximporttime
Python 标志来跟踪导入。我不完全确定在您的情况下查找禁止导入的逻辑是什么,但这里有一个可能有帮助的愚蠢示例脚本:输出:
You can use the
-Ximporttime
Python flag to trace imports. I'm not entirely sure what would be the logic for finding forbidden imports in your case, but here's a silly example script that might help:Output:
我不知道针对这种特定情况是否存在测试方法,但有人可能知道更多。我想到的一件事是
try-catch
,检查其他模块中的方法是否可以调用方法。另一种黑客方法是在每个模块的全局上下文中添加自定义字符串常量,如果它们存在,您就知道子模块导入/使用了其他模块。详细了解堆栈溢出帖子。
I am not aware that testing methods exist for this specific case, but someone might know more about it. One thing that comes to mind are
try-catch
with the methods from the other module being checked if you can call a method. Another hacky way, would be to add custom string constants in global context of the each module, and if they are exist you know that the submodule imported/used the other module.Check more on this stack overflow post.