全局测试初始化​​MSTest的方法

mgl*_*mnc 56 c# mstest

快速问题,如何在运行解决方案中的所有测试之前创建仅运行一次的方法.

dri*_*iis 109

创建一个使用AssemblyInitialize属性修饰的公共静态方法.每次测试运行时,测试框架将调用此Setup方法:

[AssemblyInitialize()]
public static void MyTestInitialize(TestContext testContext)
{}
Run Code Online (Sandbox Code Playgroud)

对于TearDown:

[AssemblyCleanup]
public static void TearDown() 
{}
Run Code Online (Sandbox Code Playgroud)

编辑:

另一个非常重要的细节:这个方法所属的类必须用它来装饰[TestClass].否则,初始化方法将不会运行.

  • 如果您在多个程序集中进行了测试,那么MyTestInitialize将在测试运行时被多次调用. (4认同)
  • 可能不清楚 - 这不是针对每个测试运行,而是针对每个测试运行。这意味着如果您运行一组测试,例如在一次测试运行中运行类中的所有测试或在一次测试运行中运行程序集中的所有测试,则该运行中的所有这些测试都会运行一次。因此,如果一次只运行一项测试,他们可以共享该方法的结果/副作用,也可以不共享。 (2认同)

Mas*_*Net 8

只是为了强调 @driis 和 @Malice 在接受的答案中所说的内容,您的全局测试初始值设定项类应如下所示:

namespace ThanksDriis
{
    [TestClass]
    class GlobalTestInitializer
    {
        [AssemblyInitialize()]
        public static void MyTestInitialize(TestContext testContext)
        {
            // The test framework will call this method once -BEFORE- each test run.
        }

        [AssemblyCleanup]
        public static void TearDown() 
        {
            // The test framework will call this method once -AFTER- each test run.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)