[英]Is it possible to run code after all tests finish executing in MStest
我正在編寫編碼的ui測試,如果它尚未打開,我將打開應用程序。 然后,如果其中一個失敗我關閉應用程序,事情是我在多個項目中有多個測試是否有辦法在所有測試完成執行后關閉應用程序? testSettings文件中是否有可能存在的內容?
如果這有幫助,我的所有測試類都派生自一個codeduiTestBase,這就是我設置我所擁有的設置的方式。
我不想在每次測試運行之前和之后打開和關閉應用程序,因為它是一個很大的應用程序,加載時間太長。
對的,這是可能的。 您可以使用AssemblyCleanup屬性來實現此目的:
標識一個方法,該方法包含在程序集中的所有測試運行后要使用的代碼,以及釋放程序集獲取的資源。
以下是根據執行時間排列的所有MSTest方法的概述:
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);
}
}
}
請參閱: MSTest-Methods
重要
使用基類的人也可以在那里進行程序集清理
[TestClass]
public class Page : PageContract, IWindowControlAccess
{
[AssemblyCleanup()]
public static void ApplicationCleanup()
{
Cleanup();
}
}
這里有兩件重要的事情1.基地的[TestClass]屬性是MANDATORY
2. ApplicationCleanup的簽名看到它的靜態方法
就是你完成了。 我很難掙扎和調試它。
也許您正在尋找的是TestCleanup屬性 ?
編輯:此外,如果您想在運行所有測試后運行某些東西, AssemblyCleanupAttribute可能更合適。
如果您只想在單個類中的所有測試完成后清理,請使用ClassCleanup屬性而不是AssemblyCleanup屬性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.