为什么ClassInitialize装饰方法使我的所有测试失败?

时间:2012-07-02 16:31:26

标签: .net unit-testing mstest

我理解,从MSDN开始,ClassInitialize标记一种方法,在所有测试运行之前,为所有测试执行一次设置代码。当我在下面的删节夹具中包含这样的方法时,所有测试都会失败。一旦我发表评论,他们就会再次通过。

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

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

3 个答案:

答案 0 :(得分:16)

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

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

事实上,如果我将您的代码复制粘贴到一个干净的VS项目中,那么testrunner会在错误消息中解释这一点:

  

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

答案 1 :(得分:2)

标有[ClassInitialize]的方法:

  1. 仅适用于测试类的一种方法。
  2. 班级必须密封,即不得继承。
  3. 该方法必须是公共静态的。
  4. 该方法必须传递TestContext参数。
  5. 方法不返回值。

答案 2 :(得分:0)

在VS2015中,无法使用TestContext参数导致在运行测试时输出这个最无用的错误(如果有人正在搜索异常,就像我一样):

  

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