我一直在阅读 xUnit Patterns:Refactoring Test Code ,Gerard Meszaros写的一本好书,并决定为我的单元测试提供更多测试的实用方法。据我所知,有三个地方可以放置这些工具:
问题是,如果我要使用测试实用程序,我在哪里为它们进行测试?
如果是(3),没问题。测试实用程序库只是一个具有自己的测试套件的常规项目。
案例(1)有点复杂:唯一合理的地方是将测试放在同一个测试用例类中,但如果实用程序测试失败,如何确保跳过“正常”测试?我可以在测试之间引入依赖关系(比如说,使用TestNG的属性dependsOnGroups = "utilities"
),但这看起来有点难看:例如,我需要在每个测试中复制该属性或将它们分组为依赖于彼此的嵌套测试用例类
案例(2)真是一团糟。将测试放入帮助程序类看起来很难看,并且如果某些东西(Maven,IDE)希望测试用例类以Test
结束而我的助手类没有,那么可能会破坏测试发现。将测试放入一个单独的HelperTest
测试用例类听起来更好,但后来又出现了另一个依赖性问题:如果我做一些测试依赖于HelperTest
类,那么如果我只运行一个测试,他们都会很高兴失败单个测试文件,因为在该运行期间甚至不存在这些实用程序测试(至少使用TestNG)。
我错过了什么吗?有一个行业范围的传统如何处理这个?或者我应该忘记依赖关系,只是在一堆测试同时失败的情况下在红色列表中查找实用程序测试?
答案 0 :(得分:1)
想象一下,您的生产代码中有一个实用程序方法,许多生产类都使用该方法。
如果您在此实用程序方法中引入了错误,则这些类的许多测试都将失败。然而,您并没有尝试在类的测试和实用程序方法的测试之间引入依赖关系,因为类的实用程序方法的使用是一个实现细节,您的测试不应该关心。
对于作为测试源集的一部分的实用方法,它不应该是任何不同的。测试应该假设此测试实用程序方法正常工作。如果它没有那么找不到测试失败的根本原因就不会有问题,特别是如果你对这个实用方法的测试也失败了。