8

我从 MSDN 了解到,这ClassInitialize是标记一种方法,该方法将在所有测试运行之前为所有测试执行一次设置代码。当我在下面的节略夹具中包含这样的方法时,所有测试都失败了。一旦我将其注释掉,它们就会再次通过。

[TestClass]
public class AuthenticationTests
{
    [ClassInitialize]
    public void SetupAuth()
    {
        var x = 0;
    }

    [TestMethod]
    public void TestRegisterMemberInit()
    {
        Assert.IsTrue(true);
    }
}
4

3 回答 3

18

[ClassInitialize]装饰方法应该是静态的,并且只采用一个类型的参数TestContext

[ClassInitialize]
public static void SetupAuth(TestContext context)
{
    var x = 0;
}

事实上,如果我将您的代码复制粘贴到一个干净的 VS 项目中,测试运行程序会在错误消息中准确解释这一点:

方法 UnitTestProject1.AuthenticationTests.SetupAuth 的签名错误。该方法必须是静态的、公共的、不返回值并且应该采用 TestContext 类型的单个参数。

于 2012-07-02T16:32:39.757 回答
2

标有 的方法[ClassInitialize]

  1. 仅适用于测试类的一种方法。
  2. 该类必须是密封的,即不能继承。
  3. 该方法必须是公共静态的。
  4. 该方法必须传递一个TestContext参数。
  5. 该方法不返回值。
于 2013-03-01T10:56:06.787 回答
0

在 VS2015 中,没有 TestContext 参数会导致在运行测试时输出这个最无用的错误(以防有人像我一样搜索异常):

抛出异常:Microsoft.VisualStudio.TestPlatform.Extensions.VSTestIntegration.dll 中的“Microsoft.VisualStudio.TestPlatform.MSTestFramework.TypeInspectionException”

于 2016-12-07T20:08:30.810 回答