我是 asp.net core 的新手。目前,我正在开发一个小型网站,该网站使用来自 Google、Facebook 和 Microsoft 的身份验证提供商。
现在我想为我的 HomeController
编写一些集成测试。
这是我的测试类的样子:
public class HomeControllerTests : IDisposable
{
private HomeController _homeController;
private readonly TestServer _server;
private readonly HttpClient _client;
public HomeControllerTests()
{
_server = new TestServer(new WebHostBuilder().UseEnvironment("Development").UseStartup<Startup>());
_client = _server.CreateClient();
}
[Fact]
public async void Test()
{
var result = await _client.GetAsync("/");
Assert.NotNull(result);
}
public void Dispose()
{
_server.Dispose();
_client.Dispose();
}
}
现在在我的 Startup.cs 中
builder.AddUserSecrets();
抛出 InvalidOperationException:
Microsoft.Extensions.Configuration.UserSecrets.dll 中发生类型为“System.InvalidOperationException”的异常,但未在用户代码中处理。
任何人都可以指出我正确的方向可能是错的吗?测试也会在构建服务器上运行吗?
最佳答案
我终于有时间看看我的问题了。感谢@Gevorg Narimanyan 将我推向正确的方向。我找到了一个帖子 here在 StackOverflow 上也对我有帮助。
这是我的Programs.cs
public class Program
{
public static void Main(string[] args)
{
var host = GetHostBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.Build();
host.Run();
}
public static IWebHostBuilder GetHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.AddCommandLine(args)
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
.Build();
return new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseStartup<Startup>();
}
}
这就是我的测试类中的设置:
public HomeControllerTests()
{
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var projectPath = Path.GetFullPath(Path.Combine(basePath, "../../../../WebProjectNameYouWantToTest"));
_server = new TestServer(Program.GetHostBuilder(new string[] {}).UseContentRoot(projectPath).UseEnvironment("Development").UseStartup<Startup>());
_client = _server.CreateClient();
}
使用此设置,您可以毫无问题地测试您的项目。
如果您发现任何问题或您认为这是错误的,请随时纠正我。
关于c# - 使用身份验证提供程序集成测试 asp.net 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40062701/