[英]Why does TestInitialize get fired for every test in my Visual Studio unit tests?
我正在使用Visual Studio 2010 Beta 2.我有一個[TestClass]
,它有[TestInitialize]
, [TestCleanup]
和一些[TestMethods]
。
每次運行測試方法時,都會運行初始化和清理方法!
我的印象是,每次本地測試運行時, [TestInitialize]
和[TestCleanup]
應該只運行一次。
那是對的嗎? 如果沒有,這樣做的正確方法是什么?
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/en-us/library/ms182517%28v=vs.100%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.