Powiedzmy, że ustawiam wartość na kontekście http w moim oprogramowaniu pośredniczącym. Na przykład HttpContext.User.Jak uzyskać dostęp do HttpContext w teście jednostki w ASP.NET 5/MVC 6
W jaki sposób przetestować kontekst http w moim teście jednostki. Oto przykład tego, co próbuję zrobić
Middleware
public class MyAuthMiddleware
{
private readonly RequestDelegate _next;
public MyAuthMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
context.User = SetUser();
await next(context);
}
}
test
[Fact]
public async Task UserShouldBeAuthenticated()
{
var server = TestServer.Create((app) =>
{
app.UseMiddleware<MyAuthMiddleware>();
});
using(server)
{
var response = await server.CreateClient().GetAsync("/");
// After calling the middleware I want to assert that
// the user in the HttpContext was set correctly
// but how can I access the HttpContext here?
}
}
Widzę, że w drugim podejściu użyłeś oprogramowania pośredniego do napisania odpowiedzi, która jest naprawdę sprytna. Mówiąc to, nie ma innego sposobu na uzyskanie kontekstu http w drugim podejściu, powiedzmy IHttpContextAccessor? –
@SulAga: Powiedziałbym, że drugie podejście to tak naprawdę test integracyjny, a nie test jednostkowy. Jeśli chodzi o twoje pytanie, kontekst jest dostarczany bezpośrednio do metody Invoke oprogramowania pośredniego, więc nie musisz używać IHttpContextAccessor. –
Używam asp.net rtm.Kiedy próbuję użyć podejścia 1, otrzymuję zerowy wyjątek odwołania gdzieś głęboko w aspnet.corelib. jakieś pomysły? – pthalacker