using System; using System.Net.Http; using System.Net.Http.Headers; using Autofac; using Infrastructure; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using NUnit.Framework; using OpenAuth.App; using OpenAuth.App.SSO; namespace OpenAuth.WebApi.Test { /// /// 模拟HTTP请求测试 /// 用于测试模型绑定,看看一次客户端的请求是否能被正确解析,亦或者测试WebAPI入口的一些Filter AOP等是否被正确触发。 /// 详情参考:https://www.cnblogs.com/yubaolee/p/DotNetCoreUnitTest.html /// public class TestHttpRequest { private HttpClient _client; void ConfigureTestServices(IServiceCollection services) { } void ConfigureTestContainer(ContainerBuilder builder) { AutofacExt.InitAutofac(builder); } [SetUp] public void Init() { var factory = new AutofacWebApplicationFactory(); _client = factory .WithWebHostBuilder(builder => { builder.ConfigureTestServices(ConfigureTestServices); builder.ConfigureTestContainer(ConfigureTestContainer); }) .CreateClient(); } /// /// 模拟一次登录 /// [Test] public LoginResult TestLogin() { var loginreq = new PassportLoginRequest { Account = "System", Password = "123456", AppKey = "openauth" }; var request = new StringContent(JsonHelper.Instance.Serialize(loginreq)); request.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); var response = _client.PostAsync("http://localhost:52789/api/Check/Login", request); string result = response.Result.Content.ReadAsStringAsync().Result; var loginresult = JsonHelper.Instance.Deserialize(result); Console.WriteLine($"登录结果:{result}"); return loginresult; } /// /// 模拟加载字典列表 /// [Test] public void TestLoad() { _client.DefaultRequestHeaders.Add("X-Token", TestLogin().Token); var response = _client.GetAsync("http://localhost:52789/api/categorys/load?page=1&limit=20"); string result = response.Result.Content.ReadAsStringAsync().Result; Console.WriteLine($"获取分类列表:{result}"); } } }