c# - 使用身份验证提供程序集成测试 asp.net 核心

标签 c# asp.net authentication asp.net-core integration-testing

我是 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/

相关文章:

c# - 从最低到最高显示一系列数字

c# - 是否有可能通过修改数组元素的副本来更改数组元素?

asp.net - QueryString 不接受 & - 需要

Linux 等同于 WinCrypt API

security - 我的基本用户身份验证方法有什么问题吗?

java - 找回密码Tomcat认证

c# - 组合依赖于其他可观察量的可观察量

c# - asp.net Core 2.0中如何使用ResponseCache

asp.net - 如何为 CheckBoxList 中的项目添加自定义属性?

c# - 按列表排序