跨测试共享AutoFixture

时间:2015-01-19 01:55:44

标签: c# autofixture

在多种测试方法中共享Fixture的实例是一种很好的做法吗?

或者为每个测试方法创建Fixture的新实例是否更好?

最佳做法是什么?如果你能为我提供一个反模式的来源,那将是件好事。

2 个答案:

答案 0 :(得分:7)

AutoFixture的名称取自Fixture模式:

  

"测试夹具是我们需要具备的所有东西,以便进行测试并期望特定的结果。 [...]设置测试夹具是Four-Phase Test的第一阶段。"

虽然Shared Fixture是概念上的可能性,但它有许多缺点,因为它使得测试更加难以相互独立。

AutoFixture明确设计为提供可重复使用的库来创建灯具,而不必为您需要创建的每种新型测试上下文手动编码Fixture Objects

有些人创建了一个(AutoFixture)Fixture对象并在多个测试方法中共享它,但我从来不明白他们为什么这样做;它几乎击败了AutoFixture的目的。

尽管如此,如果您发现这样的设置有用,我该告诉您是谁停止这样做?无论你的船是什么漂浮......然而,AutoFixture的设计考虑了每个测试方法的一个Fixture实例的明确用例,而且我没有看到以另一种方式做任何优势。

答案 1 :(得分:6)

最佳做法是利用AutoFixture.XunitAutoFixture.NUnit2,并避免在测试方法或函数内部或外部创建Fixture实例。

如果您不能使用上述任何胶水库,则在使用Fixture类的实例时,它被视为良好做法。每次测试。

使用Fixture类的新实例可以控制AutoFixture在每个特定测试中的行为,因为您可以对其应用自定义,并且它们不会影响所有其他测试。