測試框架 MSTest V2與單元測試


對於測試,其實不用顧慮那么多,隨便選擇吧,MSTest對VS的集成是最好的,而且也很容易上手,如果哪一天碰到它所無法解決的事情,切換到其他框架也非常簡單,僅僅只是Nuget下個包,換下特性而已。

測試用例組成

單元測試方法名應具有可讀性,讓整個測試方法在不需要注釋說明的情況下可以被讀懂。

<被測試方法名稱>_<期望的結果>_<給予的條件>

一個完整的單元測試用例應該包含如下三個部分:

  • Arrange:准備當前測試場景的前置條件;
  • Action:執行被測試方法;
  • Assert:對被測試方法的執行結果進行斷言判斷。

代碼覆蓋率

代碼覆蓋率指的是運行單元測試時,產品代碼的覆蓋情況。
在測試資源管理器中,對選中的單元測試或者全部單元測試的代碼進行覆蓋率檢查。
雙擊相應方法可以看到具體的代碼覆蓋情況:紅色(未被覆蓋),米色(未覆蓋完全),淺藍色(完全覆蓋)。

對於明確要求測試的公共方法,該方法的代碼覆蓋率要求100%。
對於指定排除在覆蓋率之外的代碼,可使用[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage()]。

基於返回值測試

using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass()]
public class ClassNameTests
{
    [DataTestMethod]
    [DataRow(1,2,3)]
    [DataRow(1,20,21)]
    public void AdditonMethodTest(int a , int b, int result)
    {
        Assert.AreEqual(result, a + b);
    }
}

測試用例

基於狀態測試

無返回值的情況下,只需要驗證更改前后是否符合預期即可。

[TestClass()]
public class LeetCodesTests
{
    [TestMethod()]
    public void HeadTailExchangeTest()
    {
        // arrange
        int[] nums = { 1, 2, 3, 4, 5, 6, 7 };
        int[] nums2 = { 1, 7, 3, 5, 4, 6, 2 };
        var lc = new LeetCodes();

        // act
        var rslt = lc.HeadTailExchange(nums);

        // assert
        Assert.IsTrue(CommFunc.Comparar<int>.CompararArray(rslt, nums2));
    }
}

依賴外部對象的測試

單元測試需要能夠快速獨立運行,隔離掉對外部的依賴是非常必要的,比如文件系統、硬件數據、web服務等。可以引入“偽對象”。
流程邏輯:要對單元測試進行約束設計;提取接口,從對具體實現的依賴解耦為對接口的依賴。偽對象實現第三方方法;被測試類添加獲取偽對象;派生類注入偽對象;在單元測試時,在派生測試類中測試即可。
隔離框架,一個能夠在運行時新建和配置偽對象的可重用的類庫,它讓開發者不用為了偽對象而編寫重復的代碼。隔離框架可以替我們動態的生成需要的偽對象,節省很多精力。常用的模擬庫,比如Moq

多線程測試

多線程測試

ILogger測試


測試用數據

AutoFixture 數據對象生成器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM