是否有一个标准来说明被测试的类应该在fixture中还是在测试中构造



我只是好奇,是否有任何标准的指导方针,说明是否应该在fixture或在实际的测试用例中构造一个类的实例?

谢谢!

我不知道关于这个主题的标准参考。下面是我要做的:

如果我只有一个测试要写,或者如果我需要一个被测试类的实例,它的构造不同于我的测试套件中该类的任何其他实例,我就在测试中实例化它。为什么要把事情弄得更复杂呢?如果我需要一次又一次地使用同一个实例,我会把它放在fixture中。

我确实认为只构造给定测试用例所需的fixture是很重要的,这样就不会误导读者。这意味着要么使用测试框架提供的任何作用域机制(例如,一个rspec context块或一个全新的xUnit TestCase),只在需要它的测试之前构造给定的fixture,要么将实例构造从fixture移动到测试。为了避免重复,您总是可以编写一个方法来构造一个实例,并从您想要的任意多个测试中调用它。

我倾向于避免在fixture中放置任何东西。过了一段时间,随着夹具中测试数量的增加,CUT状态趋于失控。每个测试都需要一个相似但不同的行为,可以或不可以添加到一些初始化/设置方法中。
在fixture级别中使用CUT会在测试之间创建共享状态,这会导致由于运行顺序导致的测试失败——这是一个查找和修复的痛苦过程。

另一个可读性问题发生在测试失败时——人们倾向于忘记可能在另一个方法中发生的初始化。

有更好的方法来避免代码重复——使用AutoMocking容器来创建带有假参数的对象或工厂方法,从而为每个测试(如果需要)启用不同的初始化,并创建更具可读性和可维护性的测试。

最新更新