【发布时间】:2010-07-13 18:02:40
【问题描述】:
我正在为使用外部数据源的 Django 应用程序编写测试。显然,我使用假数据来测试我班级的所有内部工作,但我也想对实际的 fetcher 进行一些测试。其中之一将需要验证外部源仍在以我的应用程序期望的格式发送数据,这意味着请求在测试中检索该信息。
显然,我不希望我们的 CI 在出现网络问题时停机或数据提供者出现停机时间。在这种情况下,我想发出一个警告,跳过该测试方法的其余部分,并且不会导致整体失败。这样,如果数据成功到达,我可以检查它的一致性(如果有问题则失败),但如果无法获取数据,它会记录一个警告,以便我(或其他开发人员)知道快速检查数据源是否正常.
基本上,我想测试我的外部源而不依赖它!
Django 的测试套件使用 Python 的 unittest 模块(至少,我就是这样使用它的),它看起来很有用,因为它的文档描述了 Skipping tests and expected failures。此功能显然是“2.7 版中的新功能”,这解释了为什么我无法让它工作 - 我已经从控制台检查了我安装的 unittest 版本,它似乎是 1.63!
我在 pypi 中找不到更高版本的 unittest,所以 我想知道在哪里可以获得 that document 中描述的 unittest 版本,以及它是否适用于 Django (1.2)。强>
我显然愿意接受关于这是否是解决我的问题的最佳方法的建议/讨论 :)
[编辑 - 附加信息/澄清]
正如我所说,我显然是在嘲笑依赖关系并对此进行测试。但是,我还希望能够检查外部资源(通常是 API)是否仍然符合我的预期格式,如果存在网络问题或他们的服务器暂时关闭,则不会关闭 CI。我基本上只是想检查资源的一致性。
考虑以下情况...
如果您编写了 Twitter 应用程序,您将对应用程序的所有方法和行为进行测试 - 这些将使用虚假的 Twitter 数据。这为您的应用程序提供了一套完整、独立的测试。问题是这实际上并不能检查应用程序是否正常工作,因为您的应用程序本质上依赖于 Twitter API 的一致性。如果 Twitter 要更改 API 调用(可能更改 URL、参数或响应),即使单元测试仍然通过,应用程序也会停止工作。 (或者如果他们是completely switch off basic authentication!)
我的用例更简单——我有一个用于导入信息的 xml 资源。我伪造了资源并测试了我的导入代码,但我想要一个测试来检查那个 xml 资源的格式没有改变。
我的问题是关于跳过 Django 的测试运行器中的测试,因此如果资源不可用而测试失败,我可以发出警告,特别是获取支持此行为的 Python 的 unittest 模块版本。我提供了这么多背景信息,以便任何有此领域经验的人提供替代建议。
抱歉这个冗长的问题,我知道大多数人现在不会阅读此内容。 我已将重要部分“加粗”以使其更易于阅读。
【问题讨论】:
标签: python django unit-testing skip