ste*_*and 8 c# asp.net-mvc integration-testing asp.net-core
learn.microsoft.com推荐使用Microsoft.AspNetCore.Mvc.Testing进行集成测试,这似乎是一个不错的选择,但他们似乎错过了添加使用NegotiateDefaults.AuthenticationScheme进行测试的功能。
添加到 Startup.cs/ConfigureServices
services.AddAuthentication (NegotiateDefaults.AuthenticationScheme).AddNegotiate ();
Run Code Online (Sandbox Code Playgroud)
导致测试失败
消息:System.NotSupportedException:协商身份验证需要支持 IConnectionItemsFeature(如 Kestrel)的服务器。
有谁知道如何将Microsoft.AspNetCore.Mvc.Testing与使用 NegotiateDefaults.AuthenticationScheme 的端点一起使用?是否只是像例外声明一样不受支持?
WebApplicationFactory不使用kestrel,它使用内存中的TestServer和内存中的HttpClient。这些都不支持协商身份验证所需的功能。
我放弃了 Microsoft.AspNetCore.Mvc.Testing 并使用自定义 NUnit 基类:
public class AspNetCoreIntegrationTestBase
{
public CancellationTokenSource? CancellationTokenSource { get; set; }
public Task? TestWebserver { get; set; }
[OneTimeSetUp]
public void Setup()
{
CancellationTokenSource = new CancellationTokenSource();
TestWebserver = Program.CreateHostBuilder(Array.Empty<string>()).Build().StartAsync(CancellationTokenSource.Token);
}
[OneTimeTearDown]
public void CleanUp()
{
CancellationTokenSource?.Cancel();
TestWebserver?.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
要使用的 httpclient 需要初始化
UseDefaultCredentials = true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1838 次 |
最近记录: |