【发布时间】:2012-01-15 06:47:09
【问题描述】:
我最近被添加到一个项目中以添加测试覆盖率(Python/Django unittest 模块)。这个应用程序主要处理 Web API 和 JSON 请求等,我的部分工作是确保现有或未来的测试都不需要实时网络数据才能运行。
我想知道的是 - 有没有一种方法可以封装我的测试套件来检测所有网络流量尝试?
例如,对于这个应用程序的早期部分,我重写了 sys.stdout 作为一种检测和捕获任何子模块何时写入标准输出的方法。我可以做一些简单的事情来通过我的测试来捕捉网络访问的尝试吗?
编辑:感谢您的快速回复。拉电缆当然是一个简单的解决方案,但恐怕不能中断我的网络连接(大部分工作都是通过 SSH 完成的)。
我对 Wireshark 之类的工具有些熟悉,但我希望能够智能地与代码本身集成。 jcollado 的 urlopen 补丁可能是我正在寻找的,但如果不是,它看起来像一个通用的网络监控工具可能就足够了。
【问题讨论】:
-
您可以通过拉取网络连接并运行它们来判断现有测试是否正在访问网络。
-
你能用grep找到所有创建网络连接的地方吗?他们并不意外。它们通常非常明显,因为它们涉及
import和像urllib这样的适当库。是什么阻止您使用搜索? -
我不是唯一一个处理此代码的人,如果可能的话,我希望避免更改正在测试的代码或要求其他开发人员更改他们的代码。
-
您是否考虑过将代码复制到另一台机器上?即使生产代码没有,单元测试也应该独立于文件系统、数据库和网络运行。
标签: python django unit-testing tdd