91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在ASP.NET Core中使用HttpClient對象的類編寫單元測試

發布時間:2021-06-08 16:22:21 來源:億速云 閱讀:145 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關如何在ASP.NET Core中使用HttpClient對象的類編寫單元測試,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

HttpMessageHandler對象。

public class FakeHttpMessageHandler : DelegatingHandler
{
 private HttpResponseMessage _fakeResponse;

 public FakeHttpMessageHandler(HttpResponseMessage responseMessage)
 {
  _fakeResponse = responseMessage;
 }

 protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
 {
  return await Task.FromResult(_fakeResponse);
 }
}

這里我添加了一個需要HttpResponseMessage構造函數,然后復寫了SendAsync方法, 在該方法中直接返回了構造函數中傳入的HttpResponseMessage對象。

編寫一個使用IHttpClientFactory接口的服務

下面我們需要編寫一個UserService類,這個類提供了一個GetUsers方法,來從遠程服務器端獲取用戶列表。

public class UserService
{
 private readonly IHttpClientFactory _httpFactory;

 public UserService(IHttpClientFactory httpFactory)
 {
  _httpFactory = httpFactory;
 }

 public async Task<List<User>> GetUsers(string url)
 {
  using (HttpClient httpclient = _httpFactory.CreateClient())
  {
   using (HttpResponseMessage response = await httpclient.GetAsync(url))
   {
    if (response.StatusCode == HttpStatusCode.OK)
    {
     List<User> users = await response.Content.ReadAsAsync<List<User>>();
     return users;
    }
    return null; 
   }
  }
 }
}

以下是Api請求返回的用戶類

public class User
{
 public string FirstName { get; set; }
 public string LastName { get; set; }
}

如你所見,使用HttpClientFactory允許我們模擬HttpClient實例化

測試服務

在下面的單元測試中,我們會使用XUnit、FluentAssertion、NSubstitute

測試場景1: 模擬一個請求,返回2個用戶

public class UserServiceTests
{
  [Fact]
  public async Task WhenACorrectUrlIsProvided_ServiceShouldReturnAlistOfUsers()
  {
    // Arrange
    var users = new List<User>
    {
     new User
     {
       FirstName = "John",
       LastName = "Doe"
     },
     new User
     {
       FirstName = "John",
       LastName = "Deere"
     }
    };

    var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
    var url = "http://good.uri";
    var fakeHttpMessageHandler = new FakeHttpMessageHandler(new HttpResponseMessage() {
     StatusCode = HttpStatusCode.OK,
     Content = new StringContent(JsonConvert.SerializeObject(users), Encoding.UTF8, "application/json") 
    });
    var fakeHttpClient = new HttpClient(fakeHttpMessageHandler);

    httpClientFactoryMock.CreateClient().Returns(fakeHttpClient);

    // Act
    var service = new UserService(httpClientFactoryMock);
    var result = await service.GetUsers(url);

   // Assert
   result
   .Should()
   .BeOfType<List<User>>()
   .And
   .HaveCount(2)
   .And
   .Contain(x => x.FirstName == "John")
   .And
   .Contain(x => x.LastName == "Deere")
   .And
   .Contain(x => x.LastName == "Doe");
  }
}
  • 在以上測試中,我們期望獲取一個成功的響應,并得到2個用戶的信息。

  • 我們期望從Service中得到的數據是JSON格式的。

  • 我們使用一個偽造的處理程序初始化了一個HttpClient對象,然后定義了我們期望的得到的偽造對象httpClientFactoryMock.CreateClient().Returns(fakeHttpClient);

測試場景2: 模擬一個404錯誤,返回空數據

public class UserServiceTests
{
  [Fact]
  public async Task WhenABadUrlIsProvided_ServiceShouldReturnNull()
  {
    // Arrange
    var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
    var url = "http://bad.uri";
    var fakeHttpMessageHandler = new FakeHttpMessageHandler(new HttpResponseMessage() {
     StatusCode = HttpStatusCode.NotFound
    });
    var fakeHttpClient = new HttpClient(fakeHttpMessageHandler);

    httpClientFactoryMock.CreateClient().Returns(fakeHttpClient);

    // Act
    var service = new UserService(httpClientFactoryMock);
    var result = await service.GetUsers(url);

   // Assert
   result
   .Should()
   .BeNullOrEmpty();
  }
}

以上就是如何在ASP.NET Core中使用HttpClient對象的類編寫單元測試,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

化州市| 阜南县| 宜兴市| 叙永县| 金平| 南涧| 无为县| 教育| 滦南县| 清涧县| 灵川县| 建湖县| 辽宁省| 南川市| 贵南县| 漳平市| 澄迈县| 全椒县| 丹江口市| 霞浦县| 年辖:市辖区| 忻城县| 安国市| 龙井市| 咸宁市| 韶山市| 福鼎市| 呼和浩特市| 涿鹿县| 庆城县| 赤峰市| 富蕴县| 长岛县| 临城县| 宾川县| 宜都市| 缙云县| 会泽县| 博野县| 菏泽市| 广安市|