Answers:
TestInitialize
并TestCleanup
在每次测试之前和之后运行,以确保没有测试耦合。
如果要在ALL测试之前和之后运行方法,请使用ClassInitialize
和ClassCleanup
属性修饰相关方法。
Visual Studio中自动生成的测试文件中的相关信息:
在编写测试时,可以使用以下附加属性:
// Use ClassInitialize to run code before running the first test in the class
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext) { }
// Use ClassCleanup to run code after all tests in a class have run
[ClassCleanup()]
public static void MyClassCleanup() { }
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize() { }
// Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyTestCleanup() { }
完整示例摘自microsoft文档:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SampleClassLib;
using System;
using System.Windows.Forms;
namespace TestNamespace
{
[TestClass()]
public sealed class DivideClassTest
{
[AssemblyInitialize()]
public static void AssemblyInit(TestContext context)
{
MessageBox.Show("AssemblyInit " + context.TestName);
}
[ClassInitialize()]
public static void ClassInit(TestContext context)
{
MessageBox.Show("ClassInit " + context.TestName);
}
[TestInitialize()]
public void Initialize()
{
MessageBox.Show("TestMethodInit");
}
[TestCleanup()]
public void Cleanup()
{
MessageBox.Show("TestMethodCleanup");
}
[ClassCleanup()]
public static void ClassCleanup()
{
MessageBox.Show("ClassCleanup");
}
[AssemblyCleanup()]
public static void AssemblyCleanup()
{
MessageBox.Show("AssemblyCleanup");
}
[TestMethod()]
[ExpectedException(typeof(System.DivideByZeroException))]
public void DivideMethodTest()
{
DivideClass.DivideMethod(0);
}
}
}
带有[TestInitialize()]属性标记的方法用于准备运行单元测试的环境的各个方面。这样做的目的是为运行单元测试建立一个已知状态。您可以使用[TestInitialize()]方法来复制,更改或创建测试将使用的某些数据文件。
创建标有[TestCleanUp {}]属性的方法,以在测试运行后将环境返回到已知状态。这可能意味着删除文件夹中的文件或使数据库返回到已知状态。这样的一个示例是在测试了订单输入应用程序中使用的方法之后,将库存数据库重置为初始状态。
有关更多信息,请参考:http : //msdn.microsoft.com/zh-cn/library/ms182517%28v=vs.100%29.aspx