2014-07-06 64 views
5

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

[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); 
    } 
} 
+0

可能需要公开。 –

回答

7

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作为测试运行。

相关问题