簡體   English   中英

ClassInitialize上的數據驅動單元測試

[英]Data Driven Unit test on ClassInitialize

我試圖每次運行一些具有不同值的測試。 例如:我有3種方法: methodAmethodBmethodC 我想用不同的索引位置運行每個方法兩次。 我有TestInitializeClassInitialize方法。

  1. 我嘗試使用ClassInitialize但我沒有成功; 我收到編譯時錯誤,因為我的測試上下文不是靜態的。

     public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [DeploymentItem("UI.Framework.IntegrationTests\\\\ExpectedValues.xml")] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\\\ExpectedValues.xml", "searchTerm2", DataAccessMethod.Sequential)] [ClassInitialize()] publicstaticvoid ClassInitialize(TestContext context) { string indexPath = TestContext.DataRow[0].ToString(); bool isSuccess1 = SearchApiTestsHelper.InitializeSearchEngine(indexPath, null); Assert.IsTrue(isSuccess1); } 

    我不能這樣做。

  2. 我嘗試使用TestInitialize但數據行沒有被加載,它是null

     [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\\\ExpectedValues.xml", "indices", DataAccessMethod.Sequential), TestInitialize()] public void MyTestInitialize() { string indexPath = TestContext.DataRow[0].ToString(); bool isSuccess1 = SearchApiTestsHelper.InitializeSearchEngine(indexPath, null); Assert.IsTrue(isSuccess1); } 
  3. 我知道我可以將每個方法設置為運行兩次,但是,某些方法需要不同的數據進行驗證。 例如, method2仍然需要為每個索引位置運行兩次,並且對於每次運行,斷言來自數據源的一組期望值。

     [DeploymentItem("UI.Framework.IntegrationTests\\\\ExpectedValues.xml")] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\\\ExpectedValues.xml", "pb1", DataAccessMethod.Sequential), TestCategory("Integration")] [TestMethod] public void PhraseBoosting() { expectedVal = TestContext.DataRow[0].ToString(); } 

    如何歸檔?

假設這樣的XML文件:

<Values>
  <searchTerm2>this is search term 2</searchTerm2>
  <indices>these are the indices</indices>
  <pb1>personal best?</pb1>
</Values>

您可以像這樣訪問值:

[TestClass]
    public class UnitTest1
    {
        public TestContext TestContext
        {
            get;
            set;
        }

        //[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\ExpectedValues.xml", "Values", DataAccessMethod.Sequential)]
        //[ClassInitialize]
        //public static void ClassInitialize(TestContext testContext)
        //{
        //    string indexPath = testContext.DataRow["searchTerm2"].ToString();
        //    Console.WriteLine(indexPath);
        //}

        [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\ExpectedValues.xml", "Values", DataAccessMethod.Sequential)]
        [TestInitialize]
        public void TestInitialize()
        {
            string indexPath = TestContext.DataRow["indices"].ToString();
            Console.WriteLine(indexPath);
        }

        [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\ExpectedValues.xml", "Values", DataAccessMethod.Sequential)]        
        [TestMethod]
        public void TestMethod1()
        {
            string indexPath = TestContext.DataRow["pb1"].ToString();
            Console.WriteLine(indexPath);
        }
    }

類初始化方法似乎不起作用。 我不確定這是否符合設計要求。

VS單元測試框架不支持類初始化級別的數據驅動測試。 唯一的選擇是在TestMethod級別使用它。 我希望他們將此添加到下一個版本。

暫無
暫無

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

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