BaseTest.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using My.Admin.Common.Configs;
  2. using My.Admin.Common.Helpers;
  3. using Autofac.Extensions.DependencyInjection;
  4. using Microsoft.AspNetCore.Hosting;
  5. using Microsoft.AspNetCore.TestHost;
  6. using Microsoft.Extensions.Configuration;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.Hosting;
  9. using Microsoft.Extensions.Logging;
  10. using NLog.Web;
  11. using System;
  12. using System.IO;
  13. using System.Net.Http;
  14. using EnvironmentName = Microsoft.AspNetCore.Hosting.EnvironmentName;
  15. using My.Admin.HttpApi.Host;
  16. namespace My.Admin.Tests
  17. {
  18. public class BaseTest
  19. {
  20. protected AppConfig AppConfig { get; }
  21. protected TestServer Server { get; }
  22. protected HttpClient Client { get; }
  23. protected IServiceProvider ServiceProvider { get; }
  24. protected BaseTest()
  25. {
  26. AppConfig = new ConfigHelper().Get<AppConfig>("appconfig") ?? new AppConfig();
  27. var builder = CreateHostBuilder();
  28. var host = builder.Build();
  29. host.Start();
  30. Server = host.GetTestServer();
  31. Client = host.GetTestClient();
  32. ServiceProvider = Server.Services;
  33. }
  34. private IHostBuilder CreateHostBuilder()
  35. {
  36. var configsPath = Path.Combine(AppContext.BaseDirectory, "configs").ToPath();
  37. return Host.CreateDefaultBuilder()
  38. .UseServiceProviderFactory(new AutofacServiceProviderFactory())
  39. .ConfigureWebHostDefaults(webBuilder =>
  40. {
  41. webBuilder
  42. .UseEnvironment(EnvironmentName.Development)
  43. .UseStartup<Startup>()
  44. .ConfigureAppConfiguration((host, config) =>
  45. {
  46. if (AppConfig.RateLimit)
  47. {
  48. config.AddJsonFile($"{configsPath}/ratelimitconfig.json", optional: true, reloadOnChange: true)
  49. .AddJsonFile($"{configsPath}/ratelimitconfig.{host.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
  50. }
  51. });
  52. webBuilder.UseTestServer();
  53. })
  54. .ConfigureLogging(logging =>
  55. {
  56. logging.ClearProviders();
  57. logging.SetMinimumLevel(LogLevel.Trace);
  58. })
  59. .UseNLog();
  60. }
  61. public T GetService<T>()
  62. {
  63. return ServiceProvider.GetService<T>();
  64. }
  65. public T GetRequiredService<T>()
  66. {
  67. return ServiceProvider.GetRequiredService<T>();
  68. }
  69. }
  70. }