mirror of
https://gitee.com/yubaolee/OpenAuth.Core.git
synced 2025-12-06 08:38:50 +08:00
增加支持Autofac的http单元测试
This commit is contained in:
@@ -28,7 +28,7 @@ namespace OpenAuth.App.Test
|
||||
//读取OpenAuth.WebApi的配置文件用于单元测试
|
||||
var path = AppContext.BaseDirectory;
|
||||
int pos = path.IndexOf("OpenAuth.App");
|
||||
if (pos == -1) //如果测试入库是OpenAuth.WebApi
|
||||
if (pos == -1) //如果测试入口是OpenAuth.WebApi
|
||||
{
|
||||
pos = path.IndexOf("OpenAuth.WebApi");
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<PackageReference Include="log4net" Version="2.0.12" />
|
||||
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0" />
|
||||
|
||||
18
OpenAuth.WebApi/Test/AutofacWebApplicationFactory.cs
Normal file
18
OpenAuth.WebApi/Test/AutofacWebApplicationFactory.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using Microsoft.AspNetCore.Mvc.Testing;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace OpenAuth.WebApi.Test
|
||||
{
|
||||
/// <summary>
|
||||
/// Based upon https://github.com/dotnet/AspNetCore.Docs/tree/master/aspnetcore/test/integration-tests/samples/3.x/IntegrationTestsSample
|
||||
/// </summary>
|
||||
/// <typeparam name="TStartup"></typeparam>
|
||||
public class AutofacWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
|
||||
{
|
||||
protected override IHost CreateHost(IHostBuilder builder)
|
||||
{
|
||||
builder.UseServiceProviderFactory(new CustomServiceProviderFactory());
|
||||
return base.CreateHost(builder);
|
||||
}
|
||||
}
|
||||
}
|
||||
46
OpenAuth.WebApi/Test/CustomServiceProviderFactory.cs
Normal file
46
OpenAuth.WebApi/Test/CustomServiceProviderFactory.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Autofac;
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace OpenAuth.WebApi.Test
|
||||
{
|
||||
/// <summary>
|
||||
/// Based upon https://github.com/dotnet/aspnetcore/issues/14907#issuecomment-620750841 - only necessary because of an issue in ASP.NET Core
|
||||
/// </summary>
|
||||
public class CustomServiceProviderFactory : IServiceProviderFactory<ContainerBuilder>
|
||||
{
|
||||
private AutofacServiceProviderFactory _wrapped;
|
||||
private IServiceCollection _services;
|
||||
|
||||
public CustomServiceProviderFactory()
|
||||
{
|
||||
_wrapped = new AutofacServiceProviderFactory();
|
||||
}
|
||||
|
||||
public ContainerBuilder CreateBuilder(IServiceCollection services)
|
||||
{
|
||||
// Store the services for later.
|
||||
_services = services;
|
||||
|
||||
return _wrapped.CreateBuilder(services);
|
||||
}
|
||||
|
||||
public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder)
|
||||
{
|
||||
var sp = _services.BuildServiceProvider();
|
||||
#pragma warning disable CS0612 // Type or member is obsolete
|
||||
var filters = sp.GetRequiredService<IEnumerable<IStartupConfigureContainerFilter<ContainerBuilder>>>();
|
||||
#pragma warning restore CS0612 // Type or member is obsolete
|
||||
|
||||
foreach (var filter in filters)
|
||||
{
|
||||
filter.ConfigureContainer(b => { })(containerBuilder);
|
||||
}
|
||||
|
||||
return _wrapped.CreateServiceProvider(containerBuilder);
|
||||
}
|
||||
}
|
||||
}
|
||||
61
OpenAuth.WebApi/Test/TestHttpRequest.cs
Normal file
61
OpenAuth.WebApi/Test/TestHttpRequest.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 模拟HTTP请求测试
|
||||
/// </summary>
|
||||
public class TestHttpRequest
|
||||
{
|
||||
private HttpClient _client;
|
||||
|
||||
void ConfigureTestServices(IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton("");
|
||||
}
|
||||
|
||||
void ConfigureTestContainer(ContainerBuilder builder)
|
||||
{
|
||||
AutofacExt.InitAutofac(builder);
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
public void Init()
|
||||
{
|
||||
var factory = new AutofacWebApplicationFactory<Startup>();
|
||||
|
||||
_client = factory
|
||||
.WithWebHostBuilder(builder => {
|
||||
builder.ConfigureTestServices(ConfigureTestServices);
|
||||
builder.ConfigureTestContainer<ContainerBuilder>(ConfigureTestContainer);
|
||||
})
|
||||
.CreateClient();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestLogin()
|
||||
{
|
||||
var loginreq = new PassportLoginRequest
|
||||
{
|
||||
Account = "System",
|
||||
Password = "123456",
|
||||
AppKey = "openauth"
|
||||
};
|
||||
// Act
|
||||
var request = new StringContent(JsonHelper.Instance.Serialize(loginreq));
|
||||
request.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
|
||||
var response = _client.PostAsync("/api/Check/Login", request);
|
||||
|
||||
Console.WriteLine($"返回结果:{response.Result.Content}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user