BaseTest.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.IO;
  3. using System.Net.Http;
  4. using Microsoft.AspNetCore.Hosting;
  5. using Microsoft.AspNetCore.TestHost;
  6. using Microsoft.Extensions.Hosting;
  7. using Microsoft.Extensions.Logging;
  8. using Microsoft.Extensions.Configuration;
  9. using Microsoft.Extensions.DependencyInjection;
  10. using Autofac.Extensions.DependencyInjection;
  11. using NLog.Web;
  12. using Admin.Core.Common.Configs;
  13. using Admin.Core.Common.Helpers;
  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. #if DEBUG
  49. .AddJsonFile($"{configsPath}/ratelimitconfig.Development.json", false)
  50. #endif
  51. ;
  52. }
  53. });
  54. webBuilder.UseTestServer();
  55. })
  56. .ConfigureLogging(logging =>
  57. {
  58. logging.ClearProviders();
  59. logging.SetMinimumLevel(LogLevel.Trace);
  60. })
  61. .UseNLog();
  62. }
  63. public T GetService<T>()
  64. {
  65. return ServiceProvider.GetService<T>();
  66. }
  67. public T GetRequiredService<T>()
  68. {
  69. return ServiceProvider.GetRequiredService<T>();
  70. }
  71. }
  72. }