为什么不自动调用TestInitialize?

Dan*_*son 5 c# unit-testing visual-studio-2013

我只是using Microsoft.VisualStudio.TestTools.UnitTesting;在测试之前没有调用我标记为[TestInitialize]的方法.我之前从未使用过这个特定的测试框架,但是在其他所有框架中总是有一种注册Setup和TearDown方法的方法,该方法将在每次测试之前和之后自动运行.视觉工作室测试工具单元测试框架不是这种情况吗?

[TestClass]
public class RepoTest
{
    private const string TestConnectionString = @"Server=localhost\SQL2014EXPRESS64; Database=RepoTest; Trusted_Connection=True;";
    private const string MasterConnectionString = @"Server=localhost\SQL2014EXPRESS64; Database=master; Trusted_Connection=True;";

    [TestInitialize]
    private void Initialize()
    {
        using(var connection = new SqlConnection(MasterConnectionString))
        using(var command = new SqlCommand(Resources.Initialize, connection))
        {
            command.ExecuteNonQuery();
        }
    }

    [TestCleanup]
    private void Cleanup()
    {
        using (var connection = new SqlConnection(MasterConnectionString))
        using (var command = new SqlCommand(Resources.Cleanup, connection))
        {
            command.ExecuteNonQuery();
        }
    }

    [TestMethod]
    public void CreateARepo()
    {
        var repo = new Repo(TestConnectionString);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ily*_*nov 6

制作InitializeCleanup公开.您还可以检查,在msdn,所有示例都有公共访问器.

为了重现,做出这样的测试类:

[TestClass]
public class Tests
{
    [TestInitialize]
    public void Initialize()
    {
        Console.WriteLine("initialize");
    }

    [TestCleanup]
    public void Cleanup()
    {
        Console.WriteLine("cleanup");
    }

    [TestMethod]
    public void Test()
    {
        Console.WriteLine("test body");
    }
}
Run Code Online (Sandbox Code Playgroud)

该测试将产生以下结果:

在此输入图像描述

制作InitializeCleanup私人,你会看到只有test body打印到控制台:

在此输入图像描述

使用Microsoft.VisualStudio.QualityTools.UnitTestFramework程序集作为单元测试框架版本10.1.0.0和ReSharper 8.2作为测试运行程序.