允许测试依赖其他测试的测试框架
我在想,是否有一种测试框架,可以让测试之间声明依赖关系。也就是说,如果某个测试依赖的其他测试没有通过,那么这个测试就不应该运行,或者它的结果也不应该被显著显示出来。
这样做的目的是为了在有很多测试失败的情况下,更容易找到问题的根源。
另外,如果能有办法把一个测试中创建的对象作为其他测试的基础,那就更好了。
有没有哪个Python的测试框架提供了这样的功能?或者说,这种做法是否与单元测试的基本理念相悖?
5 个回答
1
这个问题似乎经常被提到,比如说 #3396055。
这很可能不是单元测试,因为单元测试应该是快速且独立的。所以一次性运行所有测试并不会太麻烦。我能理解这样做可以帮助节省时间,特别是在进行集成测试或回归测试时。如果你觉得这个需求很重要,我建议给这些设置测试加个标签,比如 [Core] 之类的。
接下来,我会写一个构建脚本,里面有两个任务:
- 任务一:运行所有带有 [Core] 标签的 X、Y、Z 这几个 dll 文件中的测试。
- 任务二:依赖于任务一:运行所有 X、Y、Z 这几个 dll 文件中的测试,但不包括那些带有 [Core] 标签的测试。
(如果任务一没有成功,任务二就不应该运行。)这并不是一个完美的解决方案,比如说如果有任何一个 [Core] 测试失败,它就会直接停止。但我觉得你应该先修复这些核心测试,而不是继续进行非核心测试。
2
Proboscis 是一个Python测试框架,它在Python自带的unittest模块和Nose的基础上,增加了一些来自TestNG的功能。
听起来这正是你需要的。不过要注意,它的工作方式和unittest以及Nose有点不同,但那个页面对它的工作原理解释得很清楚。
5
这种方法是否与单元测试的基本理念相悖呢?
没错……如果是单元测试,它应该能够独立运行。每当我发现有人想在测试中创建依赖关系时,通常是因为代码结构不太好。我并不是说你就是这种情况,但这往往是代码质量不佳的一个迹象。