簡體   English   中英

為什么我的Visual Studio單元測試中的每個測試都會觸發TestInitialize?

[英]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]應該只運行一次。

那是對的嗎? 如果沒有,這樣做的正確方法是什么?

TestInitializeTestCleanup在每次測試之前和之后運行,這是為了確保沒有測試耦合。

如果要在ALL測試之前和之后運行方法,請使用ClassInitializeClassCleanup屬性修飾相關方法。

來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM