2010-10-07 164 views
3

我想知道是否有一个测试框架允许测试被声明为依赖于其他测试。这意味着他们不应该被运行,或者如果他们依赖的测试没有通过,他们的结果不应该被显着地显示出来。允许测试依赖于其他测试的测试框架

这样的设置的点是允许的根源在那里有许多测试失败的情况下能够更容易地确定。

作为奖励,这将是巨大的,如果有某种方式来使用它来测试所创建的对象为其他测试夹具。

此功能是否由任何Python测试框架提供?或者这种方法与单元测试的基本哲学是否相反?

+1

如果你的“单位”依赖于其他单位,这听起来像你并不是真正的单向测试。你实际上是集成测试。如果你想进行单元测试,你最好将不能失败的模拟对象传递给每个单元,而不是使用真实对象。 – naught101 2015-01-20 01:10:34

回答

4

或者这样的方法是 与单元测试的 对立的哲学?

是......如果是单元测试,应该可以自行运行。任何时候我发现有人想要在测试上创建依赖关系是因为代码的构造方式不佳。我并不是说你的情况就是这种情况,但它往往可能是代码异味的标志。

+0

虽然这对于集成测试来说是合适的。 – naught101 2015-01-20 01:10:52

+0

如何测试需要使用用户名和密码登录的API?是否应该为每个单元测试重新建立登录会话? – 2017-11-06 17:19:27

0

看起来你需要的不是阻止你的相关测试的执行,但报告中,使您可以识别更结构化的方式您的单元测试的结果什么时候在测试级联错误到其它测试失败。

+0

当然,是的..如果他们需要一段时间才能运行,那么防止测试运行才会真正有用。是否有一些确定的方法来排除错误级联? – intuited 2010-10-08 20:11:03

1

这似乎是一个反复出现的问题 - 例如, #3396055

它很可能不是一个单元测试,因为他们应该是快速(和独立)。所以将它们全部运行并不是很大的阻力。我可以看到这可能有助于短路积分/回归运行以节省时间。如果这是您的主要需求,我会用[Core]或某些此类属性标记安装测试。

然后我开始写这有两个任务

构建脚本
  • Taskn:运行在X,Y,打上标签ž的dll [核心]所有测试
  • Taskn + 1取决于Taskn:运行X,Y,不包括标有标签[核心】Z DLL的所有测试

(如果Taskn没有成功Taskn + 1不应该运行。)这不是一个完美的解决方案 - 例如:如果任何一项[Core]测试失败,它只会退出。但是我猜你应该修复Core核心,而不是进行非核心测试。

+0

我的问题与速度没有太大关系,但偶尔会遇到很多难以筛选的失败测试。我正在考虑能够在测试中使用装饰器来指示它不应该运行,除非其他测试方法已经通过将是有用的。也许从确定的方法返回值可以作为装饰测试方法的kwarg提供。当然,这需要测试框架构建一个依赖关系图。这可能只是因为我需要在这种情况下重构我的测试套件和/或代码 - 我认为Aaron的建议非常聪明。 – intuited 2010-10-09 05:57:33

+0

@intuit .. - 是的,如果你可以通过重构你的测试代码来避免这种情况,那么这样做。我的回答是这样的情况:“这太费力了”,在这种情况下,这可能是一种接受的妥协,因此您可以区分核心测试失败和dep测试失败。 – Gishu 2010-10-09 06:17:29

0

的测试运行py.test,Nosetests和UNIT2/unittest2都支持“第一次失败后退出”的概念。 py.test更一般地允许指定“--maxfail = NUM​​”以在NUM失败后停止运行和报告。这可能已经对你的案例有所帮助,特别是因为维护和更新测试依赖关系可能不是那么有趣的任务。

+0

嗯...我认为这实际上没有什么帮助,因为第一次测试的选择与底层依赖关系图无关。 I.E.我会在某些更高级别的测试中失败,而不是看到根本原因失败。我主要希望找到一种方法来为未来的项目做到这一点,我不确定它是否真的值得现有的项目。 – intuited 2010-10-09 20:12:38

+0

我经常对我的测试进行分组,以便首先进行细粒度的单元测试,然后进行更高级别的测试。 py.test以文件顺序运行测试,这有助于。不过,我同意一些跨文件压缩声明可能会有用。 – hpk42 2010-10-10 18:49:01

2

Proboscis是一个Python测试框架,它通过TestNG的功能扩展了Python的内置unittest模块和鼻子。

听起来你在找什么。请注意,它对unittest和Nose有点不同,但该页面解释了它的工作原理。