BaseTest.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Admin.Core.Common.Configs;
  2. using Admin.Core.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. namespace Admin.Core.Tests
  16. {
  17. public class BaseTest
  18. {
  19. protected AppConfig AppConfig { get; }
  20. protected TestServer Server { get; }
  21. protected HttpClient Client { get; }
  22. protected IServiceProvider ServiceProvider { get; }
  23. protected BaseTest()
  24. {
  25. AppConfig = new ConfigHelper().Get<AppConfig>("appconfig") ?? new AppConfig();
  26. var builder = CreateHostBuilder();
  27. var host = builder.Build();
  28. host.Start();
  29. Server = host.GetTestServer();
  30. Client = host.GetTestClient();
  31. ServiceProvider = Server.Services;
  32. }
  33. private IHostBuilder CreateHostBuilder()
  34. {
  35. var configsPath = Path.Combine(AppContext.BaseDirectory, "configs").ToPath();
  36. return Host.CreateDefaultBuilder()
  37. .UseServiceProviderFactory(new AutofacServiceProviderFactory())
  38. .ConfigureWebHostDefaults(webBuilder =>
  39. {
  40. webBuilder
  41. .UseEnvironment(EnvironmentName.Development)
  42. .UseStartup<Startup>()
  43. .ConfigureAppConfiguration((host, config) =>
  44. {
  45. if (AppConfig.RateLimit)
  46. {
  47. config.AddJsonFile($"{configsPath}/ratelimitconfig.json", optional: true, reloadOnChange: true)
  48. .AddJsonFile($"{configsPath}/ratelimitconfig.{host.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
  49. }
  50. });
  51. webBuilder.UseTestServer();
  52. })
  53. .ConfigureLogging(logging =>
  54. {
  55. logging.ClearProviders();
  56. logging.SetMinimumLevel(LogLevel.Trace);
  57. })
  58. .UseNLog();
  59. }
  60. public T GetService<T>()
  61. {
  62. return ServiceProvider.GetService<T>();
  63. }
  64. public T GetRequiredService<T>()
  65. {
  66. return ServiceProvider.GetRequiredService<T>();
  67. }
  68. }
  69. }