Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 为什么ClassInitialize方法必须是静态的?_Visual Studio_Unit Testing_Mstest - Fatal编程技术网

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

Visual studio 为什么ClassInitialize方法必须是静态的?,visual-studio,unit-testing,mstest,Visual Studio,Unit Testing,Mstest,我很好奇为什么夹具的设置必须是静态的?对我来说,让每个装置的实例变量共享装置的生命周期似乎更直观 是的,这些可以在构造函数中初始化,但是我假设它们超出了测试运行程序的控制范围 什么设计要求或原理决定了设置方法应该是静态的?具有ClassInitialize属性的方法对类中的所有测试运行一次。每次运行测试时都会创建该类的实例,因此它必须是静态的,才能只运行一次 如果要为每个测试进行初始化,则可以使用TestInitialize属性,该属性将在创建类的新实例时(在运行测试之前)运行 如果您需要更多信

我很好奇为什么夹具的设置必须是静态的?对我来说,让每个装置的实例变量共享装置的生命周期似乎更直观

是的,这些可以在构造函数中初始化,但是我假设它们超出了测试运行程序的控制范围


什么设计要求或原理决定了设置方法应该是静态的?

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

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

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


谢谢,我不知道每个测试都创建了一个实例。我不认为该方法必须是静态的才能运行一次。测试框架正在初始化和执行测试类。它可以在运行所有测试方法之前和之后轻松调用非静态方法。如果不是静态的,则无法与所有测试实例共享初始化。例如,如果您需要初始化所有测试使用的模拟服务。@user3285954,这没有意义;如果您需要初始化所有测试使用的服务,那么可以是一个实例方法,它在所有测试共享的类中设置实例状态。没有理由它必须是静态的。如果每个测试都是相同的,那么多次重新创建它是多余的,一个类可能有10个以上的测试。特别是如果这是一个昂贵的手术。测试完成后,实例状态将丢失,无法用于下一个测试。如果您想在每次测试运行之前做一些事情,您应该使用TestInitialize并将其存储在实例成员中,正如前面所指出的,在很多地方都有明确的描述。如果在创建任何测试类之前需要初始化,请使用AssemblyInitialize。每个测试在测试生命周期中都有自己的位置和目的。