为什么不自动调用TestInitialize?

时间:2014-07-06 22:04:25

标签: 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);
    }
}

1 个答案:

答案 0 :(得分: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");
    }
}

该测试将产生以下结果:

enter image description here

InitializeCleanup设为私有,您只会看到test body被打印到控制台:

enter image description here

将Microsoft.VisualStudio.QualityTools.UnitTestFramework程序集用作单元测试框架版本 10.1.0.0 ,将ReSharper 8.2 用作测试运行程序。