簡體   English   中英

如何在 MSTest 中正確重用測試代碼

[英]How to properly reuse test code in MSTest

我們已經開始引入一些行為測試,試圖測試一些軟件模塊,比如一個完整的黑匣子。 這個測試套件是使用從基測試類繼承來編寫的,以便於組織。

現在我們想重用這個測試套件來測試另一個接口兼容的模塊。 我們能夠找到的解決方案是繼承測試類,並實現另一個構造函數。 我想確認沒有更好的選擇,因為為每個測試套件類編寫重復的繼承類似乎是錯誤的。

[TestClass]
public class RouModel_Basic_RunnerBasic : ROUModelTest_Basic
{
    public RouModel_Basic_RunnerBasic() : base()
    {
        //init basic model here
        model = basicModel;
    }
}
[TestClass]
public class RouModel_Basic_RunnerOther : ROUModelTest_Basic
{
    public RouModel_Basic_RunnerOther() : base()
    {
        //init other model here
        model = otherModel;
    }
}

public class ROUModelTest_Basic : RouModelTest
{
   [TestMethod]
   public void TestABC() 
   {
       string input = "abc"
       var result = model.run(input);
       Assert.AreEqual("123", result);
   }
}

public class RouModelTest 
{
    protected IModelTest model;
    ...
}

如果您只想按原樣重新使用測試代碼但使用不同的被測模塊,繼承似乎是最直接的,因為您將需要為每個測試使用單獨的測試方法,而繼承是唯一的方法無需自己輸入。 這不應該引入任何重復,因為您只需要重新實現每個子類中實際上不同的部分。

如果您的問題在於您在測試用例類構造函數中構建測試裝置,另一種方法是將模板方法設計模式應用於您的測試方法,並為子類化的被測模塊添加虛擬創建方法可以覆蓋以創建您希望他們測試的特定模塊的實例。 或者,您可以創建一個測試設置方法並使用適當的屬性對其進行標記,如本答案中所述

話雖如此,如果您真的想將它們全部保留在同一個測試用例類中,那么如果您在基本測試用例類上為被測試的各個模塊實現創建方法,然后傳遞名稱將這些方法添加到您的測試方法並使用反射調用它們。 應該有一個屬性允許您將參數傳遞給測試方法,本答案中對此進行了討論。 但是,這種方法的可行性只是我的推測,您可能會冒着使測試更加晦澀難懂的風險。

暫無
暫無

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

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