国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

這篇具有很好參考價值的文章主要介紹了Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文演示Util應(yīng)用框架開發(fā)的項目中如何編寫集成測試.

準(zhǔn)備

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

測試概述

自動化測試對于Util應(yīng)用框架的開發(fā)非常重要,它能保證基礎(chǔ)功能的穩(wěn)定性.

對于使用 Util 開發(fā)的業(yè)務(wù)項目,自動化測試不是必須的,但掌握它可能很有用.

如果你使用 Util 開發(fā) Web API,可能會使用 Swagger 進(jìn)行測試.

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

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

使用 .Net 自動化測試會更加方便,并且現(xiàn)在開發(fā)集成測試的成本很低.

專業(yè)測試的分類非常細(xì),下面簡要討論自動化功能測試.

測試分類

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

  • 單元測試

    • 隔絕外部依賴,僅測試自身的某些功能.
    • 如果需要訪問外部依賴,通過定義抽象接口的方式使用,不能直接引用.
    • 在 Util 分層架構(gòu)中,一般對領(lǐng)域?qū)訉嶓w,值對象,領(lǐng)域服務(wù)實施單元測試.
  • 集成測試

    • 直接訪問外部依賴,對關(guān)聯(lián)的所有類型進(jìn)行測試.
    • 在 Util 分層架構(gòu)中,一般對基礎(chǔ)設(shè)施層倉儲,應(yīng)用層應(yīng)用服務(wù)和API接口進(jìn)行集成測試.

測試的好處

修改任何一行業(yè)務(wù)代碼,都有可能影響之前的邏輯.

自動化測試基于對業(yè)務(wù)功能的預(yù)期反應(yīng),如果預(yù)期未發(fā)生變化,但你的代碼邏輯出現(xiàn)變化,就能幫你攔截這個錯誤.

測試的弊端

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

  • 每當(dāng)需求變更,需要刪除已經(jīng)過時的測試,開發(fā)新的測試,修改之前的測試以符合當(dāng)前預(yù)期.

測試編寫條件

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

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

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

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

集成測試由于直接訪問外部依賴,運(yùn)行緩慢,而且任何環(huán)節(jié)變更都可能導(dǎo)致測試失敗,所以不宜大量編寫.

你是否需要它?

  • 如果你僅負(fù)責(zé)編寫 Web API ,手頭沒有現(xiàn)成的UI進(jìn)行測試,編寫集成測試比使用 Swagger 省力.

  • 如果你沒有打算持續(xù)維護(hù)這些測試,不要編寫它們,那只會浪費(fèi)時間.

  • 如果你的團(tuán)隊精力有限,無法維護(hù)大量的測試,可以僅對高業(yè)務(wù)價值的模塊編寫測試.

測試框架選型

  • 測試框架

    • XUnit.Net - 提供基礎(chǔ)測試語法.
    • XUnit.DependencyInjection - 為測試框架提供依賴注入能力.
  • 模擬框架

    • Moq - 為依賴服務(wù)接口創(chuàng)建模擬實現(xiàn).
  • 數(shù)據(jù)偽造框架

    • Bogus - 為集成測試生成偽數(shù)據(jù)
    • AutoBogus - Bogus 的擴(kuò)展

Util集成測試開發(fā)入門

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

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

運(yùn)行示例項目

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

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

生成的測試項目已經(jīng)將環(huán)境配置完成,你可以直接開始編寫測試.

Demo.Domain.Tests 是領(lǐng)域?qū)拥膯卧獪y試項目,如果你不需要編寫單元測試,直接刪掉它.

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

數(shù)據(jù)訪問層集成測試

Demo.Data.SqlServer.Tests 是數(shù)據(jù)訪問層 Sql Server 集成測試項目.

如果支持多種數(shù)據(jù)庫,則每種數(shù)據(jù)庫應(yīng)包含一個數(shù)據(jù)訪問層集成測試項目.

數(shù)據(jù)訪問層測試的重點是倉儲.

打開 StudentRepositoryTest 學(xué)生倉儲測試類.

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

在 StudentRepositoryTest 的構(gòu)造方法中注入了依賴接口 IDemoUnitOfWork 和 IStudentRepository.

Util 代碼生成模板默認(rèn)會創(chuàng)建 TestAddAsync 方法,它用于測試添加實體.

該測試使用偽數(shù)據(jù)生成框架創(chuàng)建學(xué)生實體,并通過倉儲保存到數(shù)據(jù)庫.

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

它們的作用不是測試邏輯,而是迅速識別開發(fā)環(huán)境是否通暢.

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

運(yùn)行數(shù)據(jù)訪問層集成測試

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

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

Demo示例的數(shù)據(jù)訪問層測試數(shù)據(jù)庫名為 Demo.Data.Test ,運(yùn)行測試時, EntityFrameworkCore 會自動創(chuàng)建和刪除測試數(shù)據(jù)庫,非常方便.

使用 Visual Studio 運(yùn)行測試

右鍵單擊 TestAddAsync 方法,彈出菜單選擇 運(yùn)行測試.

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

彈出 測試資源管理器 窗口,并自動運(yùn)行測試.

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

使用 Resharper 運(yùn)行測試

如果你安裝了Resharper, VS中的測試方法會在左側(cè)顯示測試圖標(biāo),如下圖所示.

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

點擊 Run 按鈕,運(yùn)行測試.

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門

應(yīng)用層集成測試

應(yīng)用層集成測試包含 Demo.Application.TestsDemo.Api.Tests 兩個測試項目.

應(yīng)用服務(wù)集成測試

Demo.Application.Tests 側(cè)重于測試應(yīng)用服務(wù),并且沒有Asp.Net Core相關(guān)環(huán)境干擾.

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

如果你不想維護(hù)太多測試項目,那么僅保留應(yīng)用服務(wù)集成測試即可.

打開 StudentServiceTest 測試類,代碼生成模板默認(rèn)也創(chuàng)建了一個 TestCreateAsync 測試方法.

/// <summary>
/// 學(xué)生服務(wù)測試
/// </summary>
public class StudentServiceTest {
    /// <summary>
    /// 學(xué)生服務(wù)
    /// </summary>
    private readonly IStudentService _service;

    /// <summary>
    /// 測試初始化
    /// </summary>
    public StudentServiceTest( IStudentService service ) {
        _service = service;
    }

    /// <summary>
    /// 測試創(chuàng)建
    /// </summary>
    [Fact]
    public async Task TestCreateAsync() {
        //創(chuàng)建
        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 從構(gòu)造方法注入了 IStudentService 應(yīng)用服務(wù)接口.

使用偽數(shù)據(jù)生成框架創(chuàng)建DTO,并調(diào)用服務(wù)保存數(shù)據(jù).

Web Api集成測試

Demo.Api.Tests 用于測試 Web Api控制器,它的測試環(huán)境要復(fù)雜一些.

打開 StudentControllerTest 測試類.

/// <summary>
/// 學(xué)生控制器測試
/// </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>
    /// 測試創(chuàng)建
    /// </summary>
    [Fact]
    public async Task TestCreateAsync() {
        //服務(wù)地址
        var url = "/api/student";

        //創(chuàng)建實體
        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的測試需要發(fā)送請求給控制器,并接收響應(yīng)結(jié)果,所以需要一個Http客戶端.

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

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

默認(rèn)生成的 TestCreateAsync 方法,使用偽數(shù)據(jù)生成框架創(chuàng)建DTO, 并使用 Post 請求指定 Url.

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

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

運(yùn)行 Web Api集成測試,如下所示.

Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門文章來源地址http://www.zghlxwxcb.cn/news/detail-711089.html

到了這里,關(guān)于Util應(yīng)用框架快速入門(4) - 集成測試開發(fā)入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Util應(yīng)用框架基礎(chǔ)(六) - 日志記錄(一) - 正文

    本文介紹Util應(yīng)用框架如何記錄日志. 日志記錄共分4篇,本文是正文,后續(xù)還有3篇分別介紹寫入不同日志接收器的安裝和配置方法. 日志記錄對于了解系統(tǒng)執(zhí)行情況非常重要. Asp.Net Core 抽象了日志基礎(chǔ)架構(gòu),支持使用日志提供程序進(jìn)行擴(kuò)展,提供控制臺日志等簡單實現(xiàn). Serilog 是 .N

    2024年02月05日
    瀏覽(19)
  • 適用于快速開發(fā)應(yīng)用的Golang二次框架

    適用于快速開發(fā)應(yīng)用的Golang二次框架。 GinSkeleton 項目簡介 1.這是一個基于go語言gin框架的web項目骨架,專注于前后端分離的業(yè)務(wù)場景,其目的主要在于將web項目主線邏輯梳理清晰,最基礎(chǔ)的東西封裝完善,開發(fā)者更多關(guān)注屬于自己的的業(yè)務(wù)即可。 2.本項目骨架封裝了以tb_users表

    2024年02月07日
    瀏覽(20)
  • Util應(yīng)用框架基礎(chǔ)(三) - 面向切面編程(AspectCore AOP)

    本節(jié)介紹Util應(yīng)用框架對AspectCore AOP的使用. 有些問題需要在系統(tǒng)中全局處理,比如記錄異常錯誤日志. 如果在每個出現(xiàn)問題的地方進(jìn)行處理,不僅費(fèi)力,還可能產(chǎn)生大量冗余代碼,并打斷業(yè)務(wù)邏輯的編寫. 這類跨多個業(yè)務(wù)模塊的非功能需求,被稱為 橫切關(guān)注點 . 我們需要把橫切關(guān)注點

    2024年02月05日
    瀏覽(72)
  • 自然語言處理從入門到應(yīng)用——LangChain:快速入門-[快速開發(fā)聊天模型]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月15日
    瀏覽(67)
  • 開源即時通訊IM框架MobileIMSDK的Uniapp端開發(fā)快速入門

    開源即時通訊IM框架MobileIMSDK的Uniapp端開發(fā)快速入門

    ?? 相關(guān)鏈接: ①?MobileIMSDK-Uniapp端的詳細(xì)介紹 ②?MobileIMSDK-Uniapp端的開發(fā)手冊new(*?精編PDF版) 您需要對Uniapp和Vue開發(fā)有所了解: 1) Uniapp 官方入門教程 2) 可能是最好的 uniapp 入門教程 3) Uniapp 官方 Vue 快速入門教程 您需要對WebSocket技術(shù)有所了解: 1) 新手快速入門:

    2024年02月05日
    瀏覽(22)
  • 一款專門為自動化測試打造的集成開發(fā)工具【Aqua】,“能快速構(gòu)建自動化測試項目”,就問你爽不爽吧,,,

    一款專門為自動化測試打造的集成開發(fā)工具【Aqua】,“能快速構(gòu)建自動化測試項目”,就問你爽不爽吧,,,

    你好,我是不二。 隨著行業(yè)內(nèi)卷越來越嚴(yán)重,自動化測試已成為測試工程師的必備技能,談及自動化測試肯定少不了編程,說到編程肯定離不開集成開發(fā)工具,比如:IntelliJ IDEA可以幫助我們快速構(gòu)建Maven項目、springboot項目,PyCharm可以幫助我們快速構(gòu)建Django項目、Flask項目。

    2024年02月12日
    瀏覽(24)
  • electron桌面應(yīng)用開發(fā)——快速入門教程

    electron桌面應(yīng)用開發(fā)——快速入門教程

    本文將介紹electron基本使用和構(gòu)建electron+vite+vue3腳手架開發(fā)項目,帶你快速入門。 Electron 是一個使用 JavaScript、HTML 和 CSS 構(gòu)建桌面應(yīng)用的框架。 通過將 Chromium 和 Node.js 嵌入到其二進(jìn)制文件中,Electron 允許你維護(hù)一個 JavaScript 代碼庫并創(chuàng)建可在 Windows、macOS 和 Linux 上運(yùn)行的跨平

    2024年01月17日
    瀏覽(25)
  • MongoDB從入門到實戰(zhàn)之.NET Core使用MongoDB開發(fā)ToDoList系統(tǒng)(2)-Swagger框架集成

    MongoDB從入門到實戰(zhàn)之.NET Core使用MongoDB開發(fā)ToDoList系統(tǒng)(2)-Swagger框架集成

    Swagger是一個規(guī)范且完整API文檔管理框架,可以用于生成、描述和調(diào)用可視化的RESTful風(fēng)格的 Web 服務(wù)。Swagger 的目標(biāo)是對 REST API 定義一個標(biāo)準(zhǔn)且和語言無關(guān)的接口,可以讓人和計算機(jī)擁有無須訪問源碼、文檔或網(wǎng)絡(luò)流量監(jiān)測就可以發(fā)現(xiàn)和理解服務(wù)的能力。當(dāng)通過 Swagger 進(jìn)行正確

    2024年02月21日
    瀏覽(15)
  • 一文入門最熱的LLM應(yīng)用開發(fā)框架LangChain

    一文入門最熱的LLM應(yīng)用開發(fā)框架LangChain

    1.1. LangChain 發(fā)展史 LangChain 的作者是 Harrison Chase,最初是于 2022 年 10 月開源的一個項目,在 GitHub 上獲得大量關(guān)注之后迅速轉(zhuǎn)變?yōu)橐患页鮿?chuàng)公司。2017 年 Harrison Chase 還在哈佛上大學(xué),如今已是硅谷的一家熱門初創(chuàng)公司的 CEO,這對他來說是一次重大而迅速的躍遷。Insider 獨家報

    2024年02月08日
    瀏覽(19)
  • Spring是一個開源的Java開發(fā)框架,它提供了一種快速、簡單的方式來開發(fā)企業(yè)級應(yīng)用程序

    Spring是一個開源的Java開發(fā)框架,它提供了一種快速、簡單的方式來開發(fā)企業(yè)級應(yīng)用程序

    Spring是一個開源的Java開發(fā)框架,它提供了一種快速、簡單的方式來開發(fā)企業(yè)級應(yīng)用程序。Spring的主要優(yōu)點包括簡化Java EE開發(fā)、提供依賴注入和面向切面編程等功能。以下是Spring的一些核心特性: 依賴注入(DI):Spring通過DI機(jī)制,將對象的依賴關(guān)系注入到應(yīng)用程序中,簡化了

    2024年02月03日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包