为什么ClassInitialize方法必须是静态的?

Pro*_*ofK 33 unit-testing mstest visual-studio

我很好奇为什么夹具设置必须是静态的?对于我而言,每个夹具具有共享夹具寿命的实例变量似乎更直观.

是的,这些可以在构造函数中初始化,但是我认为它们超出了测试运行器的控制范围.

什么设计要求或哲学确定设置方法应该是静态的?

Ste*_*uer 42

对于类中的所有测试,具有ClassInitialize属性的方法运行一次.每次运行测试时都会创建一个类的实例,因此它必须是静态的才能运行一次.

如果要为每个测试初始化​​,则可以使用该TestInitialize属性,该属性将在创建类的新实例时运行(在运行测试之前).

如果您需要更多信息,可以查看:

那次Pesky MSTest执行订购

  • 谢谢,我不知道为每个测试创建了一个实例. (12认同)
  • 我不认为该方法必须是静态的才能运行一次.测试框架正在初始化并执行我们正确的测试类.在运行所有测试方法之前和之后,它可以轻松地调用非静态方法. (6认同)
  • @ user3285954这没有任何意义; 如果您需要初始化所有测试使用的服务,那么可以是一个实例方法,它在所有测试共享的类中设置实例状态.它没有理由必须是静态的. (4认同)