WoI*_*IIe 3 c# unit-testing dotnet-httpclient asp.net-core asp.net-core-2.1
最近,我想出了单元测试来检查我的 ASP.NET Core 2.1 应用程序的一些重定向规则:
[Fact(DisplayName = "lowercase path")]
public async Task LowercaseRedirect()
{
var result = await this.Client.GetAsync("/BLOG/");
Assert.EndsWith("/blog/", result.RequestMessage.RequestUri.PathAndQuery, StringComparison.InvariantCulture);
}
[Fact(DisplayName = "add missing slash")]
public async Task SlashRedirect()
{
var result = await this.Client.GetAsync("/blog");
Assert.EndsWith("/blog/", result.RequestMessage.RequestUri.PathAndQuery, StringComparison.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)
仅供参考:我目前正在将 注入WebApplicationFactory<TEntryPoint>到我的测试类中,我用它来创建我的HttpClient.
但现在我很好奇如何检查 https 重定向是否有效。任何想法如何做到这一点?提前致谢 :)
对于UseHttpsRedirection,必须有一个端口可供中间件使用才能重定向到 HTTPS。如果没有可用的端口,则不会重定向到 HTTPS。
可以通过以下任何设置指定 HTTPS 端口:
要测试UseHttpsRedirection,请指定 https 端口。您可以按照以下步骤操作:
配置WebApplicationFactory与https_port
public class UnitTest1 : IClassFixture<WebApplicationFactory<CoreHttps.Startup>>
{
private readonly WebApplicationFactory<CoreHttps.Startup> _factory;
public UnitTest1(WebApplicationFactory<CoreHttps.Startup> factory)
{
_factory = factory.WithWebHostBuilder(builder => builder
.UseStartup<Startup>()
.UseSetting("https_port", "8080"));
}
Run Code Online (Sandbox Code Playgroud)默认情况下,请求 url 是http://localhost/,如果客户端没有自动重定向,请检查请求 url。
[Theory]
[InlineData("/Home")]
public async Task HttpsRedirectionWithoutAutoRedirect(string url)
{
// Arrange
var client = _factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
// Act
var response = await client.GetAsync(url);
// Assert
Assert.Equal(HttpStatusCode.RedirectKeepVerb, response.StatusCode);
Assert.StartsWith("http://localhost/",
response.RequestMessage.RequestUri.AbsoluteUri);
Assert.StartsWith("https://localhost:8080/",
response.Headers.Location.OriginalString);
}
Run Code Online (Sandbox Code Playgroud)如果请求是自动重定向,请检查请求 url。
[Theory]
[InlineData("/Home")]
public async Task HttpsRedirectionWithAutoRedirect(string url)
{
// Arrange
var client = _factory.CreateClient();
// Act
var response = await client.GetAsync(url);
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.StartsWith("https://localhost:8080/",
response.RequestMessage.RequestUri.AbsoluteUri);
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2902 次 |
| 最近记录: |