为什么TestInitialize在我的Visual Studiounit testing中的每个testing中被解雇?

我正在使用Visual Studio 2010 Beta 2.我有一个[TestClass] ,它有一个[TestInitialize][TestCleanup]和一些[TestMethods]

每次运行testing方法时,初始化和清理方法都是运行的!

我的印象是[TestInitialize][TestCleanup]只能运行一次,每个本地testing运行。

那是对的吗? 如果没有,那么这样做的正确方法是什么?

TestInitializeTestCleanup在每次testing之前和之后都运行,这是为了确保没有testing耦合。

如果要在ALLtesting之前和之后运行方法,请使用ClassInitializeClassCleanup属性修饰相关的方法。

Visual Studio中自动生成的testing文件的相关信息:

您在编写testing时可以使用以下附加属性:

 // 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() { } 

这对于testing套件来说是相当标准的行为:每次testing之前和之后的设置和拆卸。 哲学是testing不应该依赖于彼此。 如果你想要另一个行为,你应该使用在每个testing之间持久化的静态对象。

完整的例子

 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()]属性标记的方法用于准备unit testing运行环境的各个方面。 这样做的目的是build立一个运行你的unit testing的已知状态。 您可以使用[TestInitialize()]方法来复制,更改或创buildtesting将使用的某些数据文件。

创build标有[TestCleanUp {}]属性的方法,以便在testing运行后将环境返回到已知状态。 这可能意味着删除文件夹中的文件或将数据库返回到已知状态。 例如,在testing订单input应用程序中使用的方法之后,将清单数据库重置为初始状态。

有关更多信息,请参阅: http : //msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx