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

时间:2018-08-14 08:00:32

标签: c# unit-testing nunit

我应该在测试装置类中使用关键字static吗,如果可以,我将获得什么好处?

[TestFixture]
public static class MyClass

[TestFixture]
public class MyClass

4 个答案:

答案 0 :(得分:0)

根据TestFixture属性上的documentation,测试装置类可能是静态的(或可能不是静态的)。因此,似乎由您决定是否使用static关键字。

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

答案 1 :(得分:0)

NUnit支持静态固定装置和非静态固定装置,因为两者都有用。它还支持静态和非静态测试方法。

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

作为一般规则,请遵循我们大多数人对于辅助方法的一般指导原则。如果可以是静态的,则可以使其为静态,以避免不必要的复杂性。

答案 2 :(得分:0)

具有单元测试的经验,我强烈建议为您的测试创建非静态类。简短的答案:更健壮的设计,着重于重复使用。

我们有数百个单元测试和集成测试。其中许多测试执行相同的操作:创建数据,执行测试代码,验证结果以及清理数据。显然,这是重新使用的不错选择。我们有一个BaseTest类,它执行许多此功能,包括跟踪创建数据和进行清理的过程。

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

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

对于涉及共享成员数据的多个测试的关注:测试框架通过创建类的实例,执行测试然后销毁它来解决该问题。因此,每个测试都在其自己的类实例中运行。

答案 3 :(得分:0)

我认为在软件项目中,非静态优先。根据经验,如果您没有充分的理由将某件事静态化,请不要使其静态化。