日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何测试 ASP.NET Core Web API

發布時間:2023/12/4 asp.net 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何测试 ASP.NET Core Web API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本文中,我們將研究如何測試你的 ASP .NET Core 2.0 Web API 解決方案。我們將了解使用單元測試進行內部測試,使用全新的 ASP .NET Core 的集成測試框架來進行外部測試。

本文要點

  • 正確理解并使用單元測試和你的 ASP .NET Core Web API 解決方案一樣重要。

  • 了解并使用模擬數據進行單元測試可以幫助你獲得穩定的測試場景。

  • 為 ASP .NET Core Web API 解決方案在 .NET Core 2.1 中創建模擬數據項目。

  • 了解并設置集成測試來從外部測試 API,這樣可以幫助完整測試 ASP .NET Core 2.1 Web API 解決方案。

.NET Core 最初是在 2016 年發布的,隨著 .NET Core 2.0 的發布,微軟擁有了下一個通用、模塊化、跨平臺和開源的平臺主版本。.NET Core 已經創建了許多 API,在當前版本的 .net 框架中均可用。它最初是為下一代 ASP .NET 解決方案而創建的,但現在成了許多其他場景的驅動和基礎,包括物聯網、云計算和下一代移動解決方案。在本系列文章中,我們將探討 .NET Core 的一些好處,以及它如何不僅能使傳統的 .NET 開發人員受益,還能使所有需要為市場帶來健壯、高效和經濟的解決方案的技術人員受益。

在使用 ASP .NET Core 2.1 Web API 構建并開發一組豐富的 API 的時候,需要記住這只是實現穩定且高效的解決方案的第一步。為你的解決方案提供一個穩定的環境是非常重要的。獲得優秀的解決方案不僅需要完整地構建 API,還需要嚴格地測試你的 API,保證用戶有良好的體驗。

這篇文章是我之前為 InfoQ 寫的《針對 ASP.NET Core Web API 的先進架構》的后續文章。請放心,你不需要閱讀另外一篇文章,就可以從這篇文章了解到如何從測試中獲得好處,但讀一下那篇文章可以幫助你更多了解我是如何構建我討論的解決方案的。在過去的幾年里,我花了大量時間來思考在為客戶構建 API 時進行測試。了解 ASP .NET Core 2.1 Web API 的架構,可以幫助拓寬你的了解。

本篇文章中的例子的解決方案和所有代碼都可以在我的GitHub 庫中找到。

ASP .NET Core Web API 快速入門

讓我們一起來快速了解一下 .NET 和 ASP .NET Core。ASP .NET Core 是 Microsoft 創造的全新 Web 框架,以便擺脫自 ASP .NET 1.0 以來一直存在的遺留技術。ASP .NET Core 2.1 擺脫這些遺留依賴,從頭開始開發框架,因此可以給開發人員提供更高的性能,并且它是為跨平臺執行而構建的。

什么是單元測試?

對有些人來說,測試你的軟件可能是一個新的概念,但是它很簡單。我們從單元測試開始。維基百科對于它的嚴格定義是“是一種軟件測試方法,對源代碼的獨立單元、一組或多組計算機程序模塊以及相關的控制數據、使用程序和操作程序都進行測試,以了解它們是否適合使用”。我比較喜歡的是一個外行的解釋,單元測試是保證在你添加了新的功能或進行了缺陷修復之后,你的解決方案中的代碼能像預期一樣執行。我們測試了一個簡單的代碼示例,來保證它符合我們的預期。讓我們來看一下單元測試示例:

復制代碼

[Fact]

public async Task AlbumGetAllAsync()

{

// Arrange


// Act

var albums = await _repo.GetAllAsync();


// Assert

Assert.Single(albums);

}

優秀的單元測試有三個部分組成。第一個是Arrange的部分,用來設置測試中可能需要的任何資源。在上面的例子中,我沒有進行任何設置,所以 Arrange 的部分是空的 (但我還是為它保留了注釋)。第二個部分是Act的部分,用來執行測試的部分。在我們的例子中,我調用數據庫中的專輯實體類型,返回當前使用的庫中的數據源完整的專輯實體。單元測試的最后一個部分是Assert的部分,用來驗證待測試的操作是否正確。對于該測試,我檢驗是否從數據庫中返回了一個專輯。

在本文中,我會使用 xUnit 工具進行單元測試。xUnit 是 .NET Framework 和現在的 .NET Core 的開源包。我們需要 .NET Core 版本的 xUnit,在你安裝 .NET Core 2.1 SDK 的時候就已經直接獲得了。你可以通過 .NET Core cli 指令 dotnet test,或是通過你喜歡的 IDE(如 Visual Studio 2017、Visual Studio Code 或 JetBrain 的 Rider.)中的項目模板來創造新的單元測試項目。

圖 1:在 Visual Studio 2017 中創建新的單元測試項目

現在,讓我們深入到測試你的 ASP .NET Core Web API 解決方案的單元測試中來。

Web API 要單元測試一些什么?

我非常支持使用單元測試來為你的客戶保證穩定和健壯的 API。但我清楚地知道要如何使用單元測試,知道要測試什么東西。我相信,你要恰到好處地對解決方案進行單元測試,而不要做多余的測試。這是什么意思呢?可能我的觀點會引發很多評論,但是我不太注重要 100% 覆蓋你的測試。我是否認為我們需要能覆蓋 API 解決方案重要部分的測試,單獨隔開每個區域,保證每個代碼段都是正確的?當然!我會這么做,這也是我想要討論的。

由于我們的示例 Chinook.API 很小,并且可以通過集成測試來完成測試(本文稍后討論),我發現在 Domain 和 Data 項目中我最關注單元測試。我不會詳細討論單元測試的方法(因為這個問題超出了本文討論的范圍)。我想要讓你不依賴于生產數據庫的數據,從而在 Domain 和 Data 項目中進行更多的測試。這是我們下一個要討論的問題,模擬數據和對象。

為什么在單元測試中使用模擬數據和對象?

我們已經討論了為什么我們要進行單元測試,單元測試一些什么內容。接下來,了解如何準確地單元測試 ASP .NET Core Web API 解決方案是非常重要的。數據是測試 API 的重點。測試可預測的數據集是非常重要的。這就是為什么我不推薦使用生產數據或者其他可能隨著時間根據你的了解和認知會改變的數據。我們需要穩定的數據集來保證所有單元測試的運行,確保代碼段之間的測試是相同的。比如說,在我測試 Chinook.Domain 項目的時候,我想要得到 ID 是 42 的專輯,我需要保證它的確存在,并擁有類似專輯名稱這樣的細節,和一條藝術家數據有關聯關系。我還希望確保在我從數據源中得到一系列專輯時,大小滿足我編寫的單元測試。

許多業內人士使用“模擬數據”這一術語來表示這一類數據。有很多為單元測試產生模擬數據的方法,我希望你能創造出盡可能“真實”的數據集。你給測試創造的數據越好,測試效果也會越好。我會建議你確保數據沒有隱私問題,不包含公司或客戶的個人數據或敏感數據。

要滿足我們對于干凈、穩定數據的需求,我單獨創建了一個項目,封裝了單元測試項目的模擬數據。讓我們稱其為 Chinook.MockData(就像你能在示例中看到的一樣)。我的 MockData 項目幾乎和 Chinook.Data 項目相同。它們都擁有相同數量的數據庫,都和相同的接口依附。我希望 MockData 項目存儲在依賴注入 (DI) 容器中,這樣 Chinook.Domain 項目就可以像連接到了生產數據源那樣得到使用。這就是為什么我很喜歡依賴注入。它可以幫助我通過配置切換 Data 項目,而不需要做任何代碼變更。

集成測試:什么是針對 Web API 的新測試?

在我們為 ASP .NET Core Web API 解決方案執行并驗證了單元測試之后,我們要看一個完全不同類型的測試。我希望單元測試可以驗證并確保對解決方案內部組件的期望。當我們對內部測試的質量滿意的時候,我們需要從外部接口進行 API 測試,這就是我們所說的集成測試。

集成測試需要在所有的組件完成的時候編寫并執行,所以你的 API 可以通過正確的 HTTP 響應來驗證。單元測試時測試的是單獨隔離開的代碼段,而集成測試時測試的是 HTTP 端點上每個 API 的整體邏輯。測試將會遵循 API 的完整工作流,從 API 項目的控制器到域項目管理器,最后到 Data 項目的庫(返回來響應)。

創造集成測試項目

要使用你現有的測試知識,集成測試功能是基于現有的單元測試庫的。我將使用 xUnit 來創造我的集成測試。在我們創建了名為 Chinook.IntegrationTest 的新 xUnit 測試項目之后,我們需要添加合適的 NuGet 包。將 Microsoft.AspNetCore.TestHost 包添加到 Chinook.IntegrationTest 項目中來。這個包中包含了執行集成測試的資源。

圖 2:添加 Microsoft.AspNetCore.TestHost NuGet 包

接下來,我們可以創建第一個集成測試來從外部驗證我們的 API。

創建第一個集成測試

要想進行我們解決方案中的所有 API 外部測試,我要創建一個名為 API 的文件夾,其中包含了測試。我還需要在 API 域中給每個實體類型創建新的測試類。我們的首個集成測試將會覆蓋專輯實體類型。

在 API 文件夾中創建新的類 AlbumAPITest.cs。之后我們會在文件中添加如下的命名空間。

復制代碼

using Xunit;

using Chinook.API;

using Microsoft.AspNetCore.TestHost;

using Microsoft.AspNetCore.Hosting;


圖 3:使用指令進行集成測試

現在我們要使用 TestServer 來設置類,使用 HttpClient 來執行測試。我們需要名為 _client,類型為 HttpClient 的私有變量,它是基于在 AlbumAPITest 類中的構造函數中初始化的 TestServer 而創建的。TestServer 是小型 web 服務器的包裝器,是基于 Chinook.API Startup 和需要的開發環境創建的。在這個例子中,我使用開發環境。我們現在具備了運行 API 的 web 服務器,以及了解如何在 TestServer 中調用 API 的客戶端。我們可以開始編寫集成測試代碼了。

圖 4:我們第一個集成測試,獲得所有的專輯

除了構造函數代碼之外,圖 4 中還展示了第一個集成測試的代碼。AlbumGetAllTestAsync 方法將會測試驗證從 API 獲取所有專輯的調用。就像之前討論的單元測試一樣,集成測試的邏輯也是用了 Arrange、Act 和 Assert。我們首先創建 HttpRequestMessage 對象,其中 HTTP 作為 InlineData 注釋中的變量而提供,URI 部分表示對于所有的專輯的調用 (“/api/Album/”)。之后我們會讓 HttpClient _client 發送 HTTP 請求,最后,我們會檢查驗證 HTTP 響應是否滿足我們的期望,在本例中是 200。圖 4 中我展示了兩種檢驗 API 調用的方法。你可以使用其中任意一種,但我更喜歡第二種方法,因為它允許我用相同的模式來檢驗對特定 HTTP 響應代碼的響應。?

response.EnsureSuccessStatusCode();

Assert.Equal(HttpStatusCode.OK, response.StatusCode);

我們還可以創建需要從 API 測試特定實體鍵的集成測試。對于這類測試,我們需要在 InlineData 注釋中添加額外的值,將會通過 AlbumGetTestAsync 方法參數傳遞。我們的新測試會使用相同的邏輯,并使用和之前測試一樣的資源,但是我們為 HttpRequestMessage 對象在 API URI 端中傳遞實體鍵。你可以在圖 5 中查看代碼。

圖 5:專輯的第二個集成測試

在你為測試 API 創造了所有集成測試之后,需要通過 Test Runner 來運行它們,并保證它們全部通過。你創建的所有測試也可以在 DevOps 持續集成(CI)過程中執行,這樣可以在整體開發和部署過程中測試你的 API。現在需要有執行路徑保證你的 API 在開發、質量保證和部署階段都得到測試和維護,讓你的 API 使用者擁有良好體驗的同時不發生意外情況。

圖 6:在 Visual Studio 2017 中運行集成測試

結論

擁有良好設計的一套測試計劃,使用單元測試來做內部測試,使用集成測試來驗證 API 調用就和開發 ASP .NET Core Web API 階段創建架構是一樣重要的。

本文作者

Chris Woodruff?(Woody)?擁有密歇根州立大學工程學院的計算機科學學位。Woody 已經開發和架構軟件解決方案超過 20 年,并且曾經致力于許多不同的平臺和工具。他是一個社區領袖,為 GRDevNight、GRDevDay、West Michigan Day of .NET 和 CodeMash 之類的活動貢獻過力量。他還幫助把廣受歡迎的 Give Camp 活動帶到西密歇根,那里的技術專業人士提供他們的時間和發展專業知識,以幫助當地的非營利組織。作為一個演講者和播客作者,Woody 演講和討論過很多話題,包括數據庫設計和開源。他在 Visual C#、數據平臺和 SQL 方面一直是微軟的 MVP,并在 2010 年被公認為全球最優秀的 20 個 MVPs 之一。Woody 是 JetBrains 的開發者,并且在北美推廣 .NET、.NET Core 和 JetBrains 的產品。

.NET Core 最初是在 2016 年發布的,隨著 .NET Core 2.0 的發布,微軟擁有了一個通用、模塊化、跨平臺和開源的平臺主版本。.NETCore 已經創建了許多 API,在當前版本的 .net 框架中均可用。它最初是為下一代 ASP .NET 解決方案而創建的,但現在成了許多其他場景的驅動和基礎,包括物聯網、云計算和下一代移動解決方案。在本系列文章中,我們將探討 .NET Core 的一些好處,以及它如何不僅能使傳統的 .NET 開發人員受益,還能使所有需要為市場帶來健壯、高效和經濟的解決方案的技術人員受益。

原文地址:https://www.infoq.cn/article/4Z59Jy7ptKNERdv-o8Qp


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


總結

以上是生活随笔為你收集整理的如何测试 ASP.NET Core Web API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。