gpt4 book ai didi

testing - 在 ASP.NET 5/MVC 6 上的 AspNet.TestHost.TestServer 上下文中访问单元测试内的 Cookie

转载 作者:行者123 更新时间:2023-11-28 19:43:55 25 4
gpt4 key购买 nike

没有简单的方法来访问 response 对象中的 CookieContainer 运行与 AspNet.TestHost.TestServer 的集成测试。 Cookie 必须由 Controller 操作设置。实现这一目标的最佳方法是什么?

            var client = TestServer.Create(app =>
{
app.UseMvc(routes =>
routes.MapRoute("default", "{controller}/{action}/{id?}"));
app.UseIdentity();
}).CreateClient();

var request = new HttpRequestMessage(HttpMethod.Get, "account/login");
var response = await client.SendAsync(request);

// how to get an access to cookie container ?????????
// response.Cookies prop doesn't exist
Assert.NotEmpty(response.Cookies["auth"]);

我看到的解决方案是扩展 TestServer 的实例,返回类 CustomClientHandler : ClientHandler 的实例,并覆盖在该处理程序中发送请求的整个过程,但它确实需要更改所有除了 TestServer 的相对较小的代码之外的逻辑。

关于如何在响应中实现对 Cookie 的访问,有什么更好的建议吗?

最佳答案

作为@Oleh 回复的补充,您可以在不考虑更新的框架(如 .NET 4.6.1+/.NET Core)的情况下实现相同的效果

public class TestHttpClientHandler : DelegatingHandler
{
[NotNull]
private readonly CookieContainer cookies = new CookieContainer();

public TestHttpClientHandler([NotNull] HttpMessageHandler innerHandler)
: base(innerHandler) { }

[NotNull, ItemNotNull]
protected override async Task<HttpResponseMessage> SendAsync([NotNull] HttpRequestMessage request, CancellationToken ct)
{
Uri requestUri = request.RequestUri;
request.Headers.Add(HeaderNames.Cookie, this.cookies.GetCookieHeader(requestUri));

HttpResponseMessage response = await base.SendAsync(request, ct);

if (response.Headers.TryGetValues(HeaderNames.SetCookie, out IEnumerable<string> setCookieHeaders))
{
foreach (SetCookieHeaderValue cookieHeader in SetCookieHeaderValue.ParseList(setCookieHeaders.ToList()))
{
Cookie cookie = new Cookie(cookieHeader.Name.Value, cookieHeader.Value.Value, cookieHeader.Path.Value);
if (cookieHeader.Expires.HasValue)
{
cookie.Expires = cookieHeader.Expires.Value.DateTime;
}
this.cookies.Add(requestUri, cookie);
}
}

return response;
}
}

关于testing - 在 ASP.NET 5/MVC 6 上的 AspNet.TestHost.TestServer 上下文中访问单元测试内的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com