From 5741f7adf623f99b5f68a61cc5a9edf837c4d2e2 Mon Sep 17 00:00:00 2001 From: wanggaofeng <15601716045@163.com> Date: Sun, 7 Jan 2024 19:45:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NormalHttpClientTest.cs | 165 +++++++++++++++++- 1 file changed, 163 insertions(+), 2 deletions(-) diff --git a/HttpClientStudy.UnitTest/NormalHttpClientTest.cs b/HttpClientStudy.UnitTest/NormalHttpClientTest.cs index 15df1a5..c870b42 100644 --- a/HttpClientStudy.UnitTest/NormalHttpClientTest.cs +++ b/HttpClientStudy.UnitTest/NormalHttpClientTest.cs @@ -5,6 +5,12 @@ using System.Text; using System.Threading.Tasks; using System.Net.Http.Json; +using System.Net; +using Newtonsoft.Json; +using Microsoft.AspNetCore.Mvc; +using System.Text.Json; +using System.Security.Authentication.ExtendedProtection; +using Newtonsoft.Json.Linq; namespace HttpClientStudy.UnitTest { @@ -20,7 +26,7 @@ namespace HttpClientStudy.UnitTest _logger = outputHelper; } - #region Get请求 + #region GET请求 [Fact] public async Task GetAllAccounts_Test() @@ -208,6 +214,26 @@ namespace HttpClientStudy.UnitTest Assert.Equal(1, result.Code); Assert.Equal("服务注入示例",result.Data?.Name); } + + /// + /// GET 请求 + /// (直接调用System.Net.Http.Json类的扩展方法GetFromJsonAsync 获取 Json 结果) + /// + /// + [Fact] + public async Task Get_From_Json_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + var result = await httpClient.GetFromJsonAsync>("/api/Normal/GetAccountFromServices"); + + Assert.IsType>(result); + Assert.Equal(1, result.Code); + Assert.Equal("服务注入示例", result.Data?.Name); + } #endregion #region PUT 请求 @@ -266,5 +292,140 @@ namespace HttpClientStudy.UnitTest Assert.Empty(result); } #endregion + + #region POST 请求 + + [Fact] + public async Task PostSimple_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + //响应 + var responseMessage = await httpClient.PostAsync("/api/Normal/PostSimple", null); + + //响应正常 + Assert.True(responseMessage.IsSuccessStatusCode); + Assert.NotNull(responseMessage); + + var result = await responseMessage.Content.ReadFromJsonAsync>(); + Assert.IsType>(result); + Assert.Equal(1, result?.Code); + } + + [Fact] + public async Task PostCreate_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + //参数 + var para = new Account() {Id=100, Name="小明", Password="123456", Role="Admin" }; + + //请求体 + var plainContent = new StringContent(JsonConvert.SerializeObject(para), Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); + + //发POST请求 + var responseMessage = await httpClient.PostAsync("/api/Normal/PostCreate", plainContent); + + //确保响应正常 + responseMessage.EnsureSuccessStatusCode(); + + + Assert.NotNull(responseMessage); + Assert.True(responseMessage.IsSuccessStatusCode); + + var text = await responseMessage.Content.ReadAsStringAsync(); + + var result = JsonConvert.DeserializeObject (text); + + Assert.IsType(result); + Assert.Equal(201, result.StatusCode); + Assert.IsType(result.Value); + + //新创建的对象 + var account = JsonConvert.DeserializeObject(value: result.Value.ToString() ?? ""); + + Assert.NotNull(account); + Assert.Equal(100,account.Id); + + //由于构造函数等原因,直接使用ReadFromJsonAsync,会异常。 + //CreatedAtActionResult? result = await responseMessage.Content.ReadFromJsonAsync(new JsonSerializerOptions() { IncludeFields=true, PropertyNameCaseInsensitive=true}); + } + + [Fact] + public async Task PostUpdate_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + //参数 + var para = new Account() { Id = 1, Name = "小明", Password = "123456", Role = "Admin" }; + + //发POST请求 + var responseMessage = await httpClient.PostAsJsonAsync("/api/Normal/PostUpdate", para); + + //确保响应正常 + responseMessage.EnsureSuccessStatusCode(); + + + Assert.NotNull(responseMessage); + Assert.True(responseMessage.IsSuccessStatusCode); + + var result = await responseMessage.Content.ReadFromJsonAsync>(); + Assert.IsType>(result); + Assert.Equal(1, result.Code); + + Assert.Equal(1, result.Data?.Id); + } + + [Fact] + public async Task PostRemove_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + var para_id = 2; + + //发POST请求(URL传参) + var responseMessage = await httpClient.PostAsync($"/api/Normal/PostRemove?Id={para_id}", null); + + //确保响应正常 + responseMessage.EnsureSuccessStatusCode(); + + + Assert.NotNull(responseMessage); + Assert.True(responseMessage.IsSuccessStatusCode); + + var result = await responseMessage.Content.ReadFromJsonAsync>(); + Assert.IsType>(result); + Assert.Equal(1, result.Code); + + Assert.Equal(para_id, result.Data?.Id); + } + #endregion + + #region DELETE 请求 + #endregion + + #region OPTIONS 请求 + #endregion + + #region PATCH 请求 + #endregion + + #region TRACE 请求 + #endregion + + #region CONNECT 请求 + #endregion } -} +}