1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using Autofac.Extensions.DependencyInjection;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.TestHost;
- using Microsoft.Extensions.Hosting;
- using Microsoft.Extensions.Options;
- using MS.Component.Jwt;
- using MS.Component.Jwt.UserClaim;
- using MS.WebApi;
- using System.Net.Http;
- namespace WebApiTests
- {
- public static class TestHostBuild
- {
- public static readonly JwtService jwtService = new JwtService(Options.Create(new JwtSetting
- {
- Audience = "MS.Audience",
- Issuer = "MS.WebHost",
- LifeTime = 1440,
- SecurityKey = "MS.WebHost SecurityKey"//此处内容需和服务器appsettings.json中保持一致
- }));
- public static readonly UserData userData = new UserData
- {
- Account = "test",
- Email = "test@qq.com",
- Id = 1,
- Name = "测试用户",
- Phone = "123456789111",
- RoleDisplayName = "testuserRole",
- RoleName = "testuser"
- };//测试用户的数据,也可以改成真实的数据,看需求
- public static IHostBuilder GetTestHost()
- {
- //代码和网站Program中CreateHostBuilder代码很类似,去除了AddNlogService以免跑测试生成很多日志
- //如果网站并没有使用autofac替换原生DI容器,UseServiceProviderFactory这句话可以去除
- //关键是webBuilder中的UseTestServer,建立TestServer用于集成测试
- return new HostBuilder()
- .UseServiceProviderFactory(new AutofacServiceProviderFactory())//替换autofac作为DI容器
- .ConfigureWebHostDefaults(webBuilder =>
- {
- webBuilder
- .UseTestServer()//关键时多了这一行建立TestServer
- .UseStartup<Startup>();
- });
- }
- /// <summary>
- /// 生成带token的httpclient
- /// </summary>
- /// <param name="host"></param>
- /// <returns></returns>
- public static HttpClient GetTestClientWithToken(this IHost host)
- {
- var client = host.GetTestClient();
- client.DefaultRequestHeaders.Add("Authorization", $"Bearer {GenerateToken()}");//把token加到Header中
- return client;
- }
- /// <summary>
- /// 生成jwt令牌
- /// </summary>
- /// <returns></returns>
- public static string GenerateToken()
- {
- return jwtService.BuildToken(jwtService.BuildClaims(userData));
- }
- }
- }
|