簡體   English   中英

在基類中使用TestInitialize / TestCleanup進行C#單元測試

[英]C# Unit Testing with TestInitialize/TestCleanup in base class

我正在測試一個模塊,其中每個測試類共享相同的行為:

  • 開始交易
  • 執行SQL查詢
  • 回滾事務

我決定使用TestInitialize和TestCleanup分別執行事務的Begin和Rollback。

strait forward方法是在父類中編寫TestInitialize / TestCleanup,但這不適用於此測試框架。

解決這個問題的方法是使用部分類 在我的情況下,這種方法似乎是可行的,因為我的測試類主要是無狀態的。 事件不是理想的解決方案,它至少為我節省了幾個復制/粘貼操作。

誰知道更好的方法呢?

以下是部分類解決方案的示例:

在我的例子中,我分別測試每個模塊,對於這個例子,我將使用Sales模塊:

SalesTest.cs文件

[TestClass]
public partial class SalesTest
{
    [TestInitialize]
    public void Setup()
    {
        //begin transaction
    }

    [TestCleanup]
    public void Cleanup()
    {
        //rollback transaction
    }
}

SalesTest.Order文件

public partial class SalesTest
{
    [TestMethod]
    public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved()
    {
        //Run some SQL queries 
    }
}

看起來你正在使用Microsoft.VisualStudio.TestTools.UnitTesting框架。 我沒有看到使用基類進行清理和初始化的任何問題。

例如

   [TestClass]
    public class TestDemo : BaseTests
    {
        [TestMethod]
        public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved()
        {
            //Run some SQL queries 
        }

    }

    [TestClass]
    public abstract class BaseTests
    {
        [TestInitialize]
        public void Setup()
        {
            Console.WriteLine("Setup executed.");
            //begin transaction
        }

        [TestCleanup]
        public void Cleanup()
        {
            Console.WriteLine("Cleanup executed.");
            //rollback transaction
        }
    }

這樣可以正常工作,我可以將BaseTest繼承到任何Test,並且Intiailize和Cleanup將在任何測試之前和之后執行。

暫無
暫無

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

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