2010-07-13 46 views
2

我正在为使用外部数据源的Django应用程序编写测试。显然,我使用假数据来测试我的类的所有内部工作,但我想对实际的fetcher也进行一些测试。其中之一将需要验证外部源仍在发送我的应用程序预计格式的数据,这将意味着请求在测试中检索该信息。测试外部资源一致性/跳过django测试

显然,当网络出现问题或数据提供商有停机时间点时,我不希望我们的CI降低。在这种情况下,我想抛出一个警告,跳过该测试方法的其余部分,并且不会导致整体故障。这样,如果数据成功到达,我可以检查它的一致性(如果出现问题,则失败),但如果无法获取数据,它会记录警告,以便我(或其他开发人员)知道快速检查数据源是否正常。

基本上,我想测试我的外部来源而不依赖它!

Django的测试套件使用Python的unittest模块(至少,这就是我的使用方式),看起来很有用,因为它的文档描述了Skipping tests and expected failures。这个特性显然是'2.7版本中的新特性',这就解释了为什么我不能使用它 - 我已经从控制台上检查过我安装的单元测试版本,它的版本是1.63!

我无法找到的单元测试中的PyPI以后的版本,所以我不知道我在哪里可以得到在that document描述的单元测试版本保持和是否会和Django(1.2)工作。

我给的建议显然是开/在这是否是我的问题:)最好的办法讨论

[编辑 - 更多信息/澄清]

正如我所说的,我显然是在嘲笑依赖性,并在那做我的测试。但是,我还希望能够检查外部资源(通常是API)是否仍然符合我的预期格式,如果存在网络问题或其服务器暂时关闭,不会关闭CI。我基本上只想检查资源的一致性。

考虑以下情况...

如果你写了一个Twitter应用程序,你会为所有应用程序的方法和行为测试 - 这些都会使用假Twitter的数据。这为您的应用程序提供了一套完整的,自包含的测试。问题是,这实际上并没有检查应用程序的工作原理,因为你的应用程序固有地依赖于Twitter的API的一致性。如果Twitter要更改API调用(可能更改URL,参数或响应),则应用程序将停止工作,即使单元测试仍会通过。 (或者,如果他们是completely switch off basic authentication!)

我的用例更简单 - 我有一个用于导入信息的xml资源。我伪造了资源并测试了我的导入代码,但是我想要检查该XML资源的格式是否未更改。

我的问题是关于在Django的测试运行器中跳过测试,所以如果资源不可用而没有测试失败,则可以引发警告,特别是获取支持此行为的Python版本的unittest模块。我已经提供了这么多的背景信息,以允许任何有这方面经验的人提供替代建议。

对于冗长的问题表示歉意,我知道大多数人现在不会读这个。 我已经'加粗'了一些重要的部分,以便于阅读。

回答

1

我创建了一个单独的答案,因为您的修改使我的最后一个答案无效。

我假设你运行的是Python 2.6版本 - 我相信你在单元测试中寻找的改变可以在Python 2.7版本中找到。由于unittest位于标准库中,因此更新到Python 2.7应该使这些更改可供您使用。这是一个适合你的选项吗?

我可能会建议的另一个事情是,也许将“外部源格式验证”测试分为单独的测试套件并与其余的单元测试分开运行。这样你的核心单元测试仍然很快,你不必担心外部依赖会打破你的主要测试套件。如果你使用Hudson,那么创建一个独立的作业应该很容易,它将为你处理这些测试。只是一个建议。

+0

这正是我所追求的,谢谢。 (我在2.6,是啊)有趣的想法分开的依赖出来,我会考虑这一点,欢呼声。 – adamnfish 2010-07-14 13:40:29

0

你想要测试什么? Django应用程序中的代码或依赖关系?你能模拟一下外部依赖关系吗?如果你只是想测试你的Django应用程序,那么我会说模拟外部依赖,所以你的测试不依赖于外部资源的可用性。

如果你可以发布你的“实际提取器”的一些代码,也许你会得到一些关于如何使用mock的提示。

+0

嗨,谢谢你的回答。编写Django测试我没有问题。我的问题是最佳实践之一,并且(假设我的想法是有效的)有助于获得与Django集成的单元测试的最新版本。我会编辑我的问题以提供更多信息。 – adamnfish 2010-07-14 09:17:13

1

2.7中单元测试的新功能已作为unittest2被反向移植到2.6。你可以使用pip安装并用unittest2代替单元测试,你的测试可以像thyey一样工作,而且你可以在不升级到2.7的情况下获得新的功能。

+0

啊!太棒了,谢谢。这将涉及到与Django集成的一些小窍门,但需要注意的是,欢呼。 – adamnfish 2010-09-12 10:01:47