我使用的是Visual Studio2010Beta2,我只有一个[TestClass]
,它有一个[TestInitialize]
、[TestCleanup]
和几个[TestMethods]
。
每次运行测试方法时,initialize和cleanup方法也会运行!
我的印象是,每次本地测试运行时,[TestInitialize]
和[TestCleanup]
应该只运行一次。
对吗?如果不是,正确的方法是什么?
发布于 2009-12-09 20:25:31
在每次测试之前和之后都会运行TestInitialize
和TestCleanup
,这是为了确保不耦合任何测试。
如果要在所有测试之前和之后运行方法,请使用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() { }
发布于 2009-12-09 20:10:09
这是测试套件的标准行为:在每次测试之前和之后进行设置和拆卸。其哲学是测试不应该相互依赖。如果您想要另一种行为,您可能应该使用在每次测试之间持久存在的静态对象。
发布于 2015-06-24 07:09:51
取自microsoft documentation的完整示例
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);
}
}
}
https://stackoverflow.com/questions/1873191
复制相似问题