在多种测试方法中共享Fixture
的实例是一种很好的做法吗?
或者为每个测试方法创建Fixture
的新实例是否更好?
最佳做法是什么?如果你能为我提供一个反模式的来源,那将是件好事。
答案 0 :(得分:7)
AutoFixture的名称取自Fixture模式:
"测试夹具是我们需要具备的所有东西,以便进行测试并期望特定的结果。 [...]设置测试夹具是Four-Phase Test的第一阶段。"
虽然Shared Fixture是概念上的可能性,但它有许多缺点,因为它使得测试更加难以相互独立。
AutoFixture明确设计为提供可重复使用的库来创建灯具,而不必为您需要创建的每种新型测试上下文手动编码Fixture Objects。
有些人创建了一个(AutoFixture)Fixture
对象并在多个测试方法中共享它,但我从来不明白他们为什么这样做;它几乎击败了AutoFixture的目的。
尽管如此,如果您发现这样的设置有用,我该告诉您是谁停止这样做?无论你的船是什么漂浮......然而,AutoFixture的设计考虑了每个测试方法的一个Fixture
实例的明确用例,而且我没有看到以另一种方式做任何优势。
答案 1 :(得分:6)
最佳做法是利用AutoFixture.Xunit或AutoFixture.NUnit2,并避免在测试方法或函数内部或外部创建Fixture
实例。
如果您不能使用上述任何胶水库,则在使用Fixture
类的新实例时,它被视为良好做法。每次测试。
使用Fixture
类的新实例可以控制AutoFixture在每个特定测试中的行为,因为您可以对其应用自定义,并且它们不会影响所有其他测试。