<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Util應用框架快速入門(4) - 集成測試開發入門

      本文演示Util應用框架開發的項目中如何編寫集成測試.

      準備

      完成 Web Api 快速入門,本文將在之前生成的示例項目上講解集成測試的開發.

      測試概述

      自動化測試對于Util應用框架的開發非常重要,它能保證基礎功能的穩定性.

      對于使用 Util 開發的業務項目,自動化測試不是必須的,但掌握它可能很有用.

      如果你使用 Util 開發 Web API,可能會使用 Swagger 進行測試.

      將 Swagger 提供給前端人員是合適的,但后端人員使用它卻不夠省力.

      原因很簡單,使用 Swagger 測試 API,需要設置一堆參數,這些參數無法保存,每次運行都需要設置.

      使用 .Net 自動化測試會更加方便,并且現在開發集成測試的成本很低.

      專業測試的分類非常細,下面簡要討論自動化功能測試.

      測試分類

      這里粗略的對自動化功能測試概括為兩類:

      • 單元測試

        • 隔絕外部依賴,僅測試自身的某些功能.
        • 如果需要訪問外部依賴,通過定義抽象接口的方式使用,不能直接引用.
        • 在 Util 分層架構中,一般對領域層實體,值對象,領域服務實施單元測試.
      • 集成測試

        • 直接訪問外部依賴,對關聯的所有類型進行測試.
        • 在 Util 分層架構中,一般對基礎設施層倉儲,應用層應用服務和API接口進行集成測試.

      測試的好處

      修改任何一行業務代碼,都有可能影響之前的邏輯.

      自動化測試基于對業務功能的預期反應,如果預期未發生變化,但你的代碼邏輯出現變化,就能幫你攔截這個錯誤.

      測試的弊端

      • 除了開發自動化測試本身的成本以外,更大的成本在于維護.

      • 每當需求變更,需要刪除已經過時的測試,開發新的測試,修改之前的測試以符合當前預期.

      測試編寫條件

      自動化測試的語法非常簡單,但并不是掌握了測試語法就能編寫出有效的測試.

      編寫單元測試需要開發人員有一定抽象思維,能夠抽象和隔離依賴,還需要了解一些單元測試技巧.

      不要在公司全面推行單元測試,容易變成形式主義,僅讓團隊核心骨干對高價值業務模塊編寫單元測試.

      集成測試則要簡單得多,只要懂得測試語法就可以編寫.

      集成測試由于直接訪問外部依賴,運行緩慢,而且任何環節變更都可能導致測試失敗,所以不宜大量編寫.

      你是否需要它?

      • 如果你僅負責編寫 Web API ,手頭沒有現成的UI進行測試,編寫集成測試比使用 Swagger 省力.

      • 如果你沒有打算持續維護這些測試,不要編寫它們,那只會浪費時間.

      • 如果你的團隊精力有限,無法維護大量的測試,可以僅對高業務價值的模塊編寫測試.

      測試框架選型

      • 測試框架

      • 模擬框架

        • Moq - 為依賴服務接口創建模擬實現.
      • 數據偽造框架

      Util集成測試開發入門

      單元測試用于測試復雜的業務邏輯,由于快速入門Demo僅包含簡單CRUD操作,無法演示單元測試的用法.

      下面介紹在Util項目中如何開發集成測試.

      運行示例項目

      打開示例項目解決方案 Demo.sln,查看 test 子目錄,它包含4個測試項目.

      image

      生成的測試項目已經將環境配置完成,你可以直接開始編寫測試.

      Demo.Domain.Tests 是領域層的單元測試項目,如果你不需要編寫單元測試,直接刪掉它.

      其它三個項目用于集成測試,下面分別介紹.

      數據訪問層集成測試

      Demo.Data.SqlServer.Tests 是數據訪問層 Sql Server 集成測試項目.

      如果支持多種數據庫,則每種數據庫應包含一個數據訪問層集成測試項目.

      數據訪問層測試的重點是倉儲.

      打開 StudentRepositoryTest 學生倉儲測試類.

      image

      在 StudentRepositoryTest 的構造方法中注入了依賴接口 IDemoUnitOfWork 和 IStudentRepository.

      Util 代碼生成模板默認會創建 TestAddAsync 方法,它用于測試添加實體.

      該測試使用偽數據生成框架創建學生實體,并通過倉儲保存到數據庫.

      不宜編寫過多的CRUD集成測試,通常保留一兩個即可.

      它們的作用不是測試邏輯,而是迅速識別開發環境是否通暢.

      特別是當你升級框架或類庫時,有幾個簡單的集成測試非常有用.

      運行數據訪問層集成測試

      打開 appsettings.Development.json 配置文件,檢查連接字符串是否正確.

      {
          "ConnectionStrings": {
              "connection": "Server=.;Database=Demo.Data.Test;uid=sa;pwd=Pass@word;TrustServerCertificate=true"
          }
      }
      

      Demo示例的數據訪問層測試數據庫名為 Demo.Data.Test ,運行測試時, EntityFrameworkCore 會自動創建和刪除測試數據庫,非常方便.

      使用 Visual Studio 運行測試

      右鍵單擊 TestAddAsync 方法,彈出菜單選擇 運行測試.

      image

      彈出 測試資源管理器 窗口,并自動運行測試.

      image

      使用 Resharper 運行測試

      如果你安裝了Resharper, VS中的測試方法會在左側顯示測試圖標,如下圖所示.

      image

      點擊 Run 按鈕,運行測試.

      image

      應用層集成測試

      應用層集成測試包含 Demo.Application.TestsDemo.Api.Tests 兩個測試項目.

      應用服務集成測試

      Demo.Application.Tests 側重于測試應用服務,并且沒有Asp.Net Core相關環境干擾.

      對于普通項目,大多業務邏輯會寫到應用服務中, 所以它是比較理想的測試場所.

      如果你不想維護太多測試項目,那么僅保留應用服務集成測試即可.

      打開 StudentServiceTest 測試類,代碼生成模板默認也創建了一個 TestCreateAsync 測試方法.

      /// <summary>
      /// 學生服務測試
      /// </summary>
      public class StudentServiceTest {
          /// <summary>
          /// 學生服務
          /// </summary>
          private readonly IStudentService _service;
      
          /// <summary>
          /// 測試初始化
          /// </summary>
          public StudentServiceTest( IStudentService service ) {
              _service = service;
          }
      
          /// <summary>
          /// 測試創建
          /// </summary>
          [Fact]
          public async Task TestCreateAsync() {
              //創建
              var dto = StudentDtoFakeService.GetStudentDto();
              var id = await _service.CreateAsync( dto );
      
              //驗證
              var result = await _service.GetByIdAsync( id );
              Assert.NotNull( result );
              Assert.Equal( id, result.Id );
          }
      }
      

      StudentServiceTest 從構造方法注入了 IStudentService 應用服務接口.

      使用偽數據生成框架創建DTO,并調用服務保存數據.

      Web Api集成測試

      Demo.Api.Tests 用于測試 Web Api控制器,它的測試環境要復雜一些.

      打開 StudentControllerTest 測試類.

      /// <summary>
      /// 學生控制器測試
      /// </summary>
      public class StudentControllerTest : TestBase {
          /// <summary>
          /// 輸出工具
          /// </summary>
          private readonly ITestOutputHelper _testOutputHelper;
      
          /// <summary>
          /// 測試初始化
          /// </summary>
          public StudentControllerTest( ITestOutputHelperAccessor testOutputHelperAccessor,IHttpClient client ) : base( client ){
              _testOutputHelper = testOutputHelperAccessor.Output;
          }
      
          /// <summary>
          /// 測試創建
          /// </summary>
          [Fact]
          public async Task TestCreateAsync() {
              //服務地址
              var url = "/api/student";
      
              //創建實體
              var dto = StudentDtoFakeService.GetStudentDto();
              var result = await PostAsync<StudentDto>( url, dto );
      
              //驗證
              Assert.Equal( StateCode.Ok, result.Code );
              Assert.NotEmpty( result.Data.Id );
              _testOutputHelper.WriteLine( Json.ToJson( result ) );
          }
      }
      

      Web Api的測試需要發送請求給控制器,并接收響應結果,所以需要一個Http客戶端.

      StudentControllerTest 構造方法注入 Util Http客戶端接口,將接口傳遞給 TestBase 基類.

      TestBase 進一步封裝對 GET, POST ,PUT ,DELETE 操作請求,以簡化測試的編寫.

      默認生成的 TestCreateAsync 方法,使用偽數據生成框架創建DTO, 并使用 Post 請求指定 Url.

      Web Api 控制器返回 Util 約定的特定消息.

      對于開發 Web Api, 該集成測試能更好的反映與前端的交互.

      運行 Web Api集成測試,如下所示.

      image

      posted @ 2023-10-26 15:51  何鎮汐  閱讀(681)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 被喂春药蹂躏的欲仙欲死视频 | 国产高清吹潮免费视频| 国产午夜福利精品视频| 国产综合色在线精品| 麻豆文化传媒精品一区观看| 国产精品亚洲一区二区在| 午夜免费福利小电影| 狠狠色丁香婷婷综合尤物| 久爱www人成免费网站| 中文字幕无码乱码人妻系列蜜桃| 亚洲欧美日韩久久一区二区| 人妻无码不卡中文字幕系列 | 国产精品99久久久久久www| 欧美成本人视频免费播放| 国产又色又爽又黄的网站免费| 日韩有码av中文字幕| 大胸美女被吃奶爽死视频| 国产精品v欧美精品∨日韩| 国产a在视频线精品视频下载| 神马久久亚洲一区 二区| 疯狂做受XXXX高潮国产| 色窝窝免费播放视频在线| 亚洲激情国产一区二区三区| 色吊丝永久性观看网站| 国产精品高清一区二区三区| 国产精品久久精品| 熟女蜜臀av麻豆一区二区| 国产成人免费高清激情视频| 国产情侣激情在线对白| 久久国产精品亚洲精品99| 欧美综合自拍亚洲综合图 | 日韩人妻无码一区二区三区99| 成人午夜免费无码视频在线观看| 久久AV中文综合一区二区| 国产网友愉拍精品视频手机| 石渠县| 人妻夜夜爽天天爽三区麻豆av| 欧美人与动牲交A免费观看| 久久人搡人人玩人妻精品| 国产精品福利在线观看无码卡一| 日韩精品人妻av一区二区三区|