簡體   English   中英

MsTest - 在程序集中的每個測試之前執行方法

[英]MsTest - executing method before each test in an assembly

是否可以在程序集中的每次測試之前運行特定方法?

我知道TestInitialize屬性,但該屬性具有“類范圍”。 如果它是在 Test 類中定義的,它將在該類的每個測試之前執行。

我想定義一個方法,該方法將在整個程序集中定義的每個測試之前執行。

[TestInitialize()]正是您所需要的。

private string dir;

[TestInitialize()]
public void Startup()
{
    dir = Path.GetTempFileName();
    MakeDirectory(ssDir);
}

[TestCleanup()]
public void Cleanup()
{
    ss = null;
    Directory.SetCurrentDirectory(Path.GetTempPath());

    setAttributesNormal(new DirectoryInfo(ssDir));
    Directory.Delete(ssDir, true);
}


[TestMethod]
public void TestAddFile()
{
    File.WriteAllText(dir + "a", "This is a file");
    ss.AddFile("a");
    ...
}

[TestMethod]
public void TestAddFolder()
{
    ss.CreateFolder("a/");
    ...
}

這為每個測試提供了一個新的隨機臨時路徑,並在完成后將其刪除。 您可以通過在調試中運行它並查看每個測試用例的 dir 變量來驗證這一點。

我不確定在開箱即用的 MsTest 中是否可以像在其他測試框架(例如 MbUnit)中一樣使用此功能。

如果我必須使用 MsTest,那么我將通過定義具有[TestInitialize]屬性的抽象類 TestBase 來解決這個問題,並且每個需要此行為的測試都源自此基類。 在您的情況下,程序集中的每個測試類都必須從這個基類繼承......

可能還有另一種解決方案,您可以制作自定義測試屬性 - 但我還沒有嘗試過... :)

您想使用[AssemblyInitialize]

請參閱: MSDN 鏈接

或者這個問題: 在stackoverflow上

那么 MSTest 不是為每個測試實例化類嗎? 這是我對它的理解。 在這種情況下,無論您從構造函數調用什么,都是初始化代碼(根據定義每個測試)。

編輯:如果它不起作用(我仍然認為它應該起作用,因為 MSTest 需要確保單獨的測試方法運行是隔離的)然后TestInitialize是您的屬性。 順便說一下,最好的單元測試比較可以在Codeplex上的Link 上找到

我認為您正在尋找ClassInitialize屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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