NUnit 中的静态或非静态测试夹具?

Static or non static test fixture in NUnit?

我应该在测试夹具中使用关键字 static class 如果是,我会得到什么好处?

[TestFixture]
public static class MyClass

[TestFixture]
public class MyClass

根据 TestFixture 属性上的 documentation 测试夹具 class 可能是静态的(或可能不是)。所以看来是否使用static关键字取决于你。

尽管如此,使您的测试装置成为非静态的似乎是一种更好的做法,因为它可以让您在测试中使用继承。例如,如果您有一些测试装置,其中包含一组常见测试,您可以将这些测试提取到父测试装置。

NUnit 支持静态 fixture 和非静态 fixture,因为两者都很有用。它还支持静态和非静态测试方法。

如果您的夹具是非静态的,NUnit 将创建它的一个实例并将其用于测试。这允许您的测试使用继承以及维护状态。如果多个测试使用相同的成员并且您希望 运行 随时并行测试,则维护状态可能会有风险。

作为一般规则,请遵循我们大多数人对一般辅助方法所遵循的相同准则。如果某些东西 可以 是静态的,那么就让它成为静态的,以避免不必要的复杂性。

我有单元测试经验,强烈建议为您的测试创建非静态 classes。简短的回答:更健壮的设计,注重重用。

我们有数百个单元和集成测试。其中许多测试执行相同的操作:创建数据、执行测试代码、验证结果和清理数据。这显然是一个很好的重用候选者。我们有一个 BaseTest class 可以执行很多这样的功能,包括跟踪创建数据和进行清理。

同时,每个测试需要执行略有不同的操作:从不同的设置和初始化,到被测代码执行后的不同验证。

所有这些都非常适合良好的面向对象设计原则,例如继承和多态性。当使用非静态方法时,这些原则更容易使用。

至于多个测试共享成员数据的问题:测试框架通过创建 class 的实例来解决这个问题,执行测试,然后销毁它。所以每个测试都在它自己的 class 实例中运行。

我认为在软件项目中,非静态更受欢迎。根据经验,如果您没有充分的理由将某些内容设为静态,请不要将其设为静态。