Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 测试中的类是应该在夹具中构造还是应该在测试中构造,是否有一个标准?_Unit Testing_Testing_Fixtures - Fatal编程技术网

Unit testing 测试中的类是应该在夹具中构造还是应该在测试中构造,是否有一个标准?

Unit testing 测试中的类是应该在夹具中构造还是应该在测试中构造,是否有一个标准?,unit-testing,testing,fixtures,Unit Testing,Testing,Fixtures,我只是好奇,有没有标准的指导方针来说明被测试类的实例是应该在夹具中还是在实际的测试用例中构造 谢谢 我不知道关于这个话题的标准参考文献。下面是我要做的: 如果我只需要编写一个测试,或者如果我需要一个被测类的实例,该实例的构造方式与测试套件中该类的任何其他实例不同,那么我只需要在测试中实例化它。为什么要让事情变得更复杂呢?如果我需要一次又一次地使用同一个实例,我会把它放在夹具中 我确实认为只构建给定测试用例所需的装置很重要,这样就不会误导读者。这意味着要么使用测试框架提供的任何作用域机制(例如,r

我只是好奇,有没有标准的指导方针来说明被测试类的实例是应该在夹具中还是在实际的测试用例中构造


谢谢

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

如果我只需要编写一个测试,或者如果我需要一个被测类的实例,该实例的构造方式与测试套件中该类的任何其他实例不同,那么我只需要在测试中实例化它。为什么要让事情变得更复杂呢?如果我需要一次又一次地使用同一个实例,我会把它放在夹具中


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

我倾向于避免将任何东西放入夹具中。 一段时间后,随着夹具中测试次数的增加,切割状态趋于失控。每个测试都需要类似但不同的行为,这些行为可以或不能添加到某些初始化/设置方法中。
在夹具级别进行切割会在测试之间创建共享状态,这可能会由于运行顺序而导致测试失败,这是一个很难找到和修复的问题

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

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