我通过xUnit测试Api控制器。
在测试方法中,我需要在LoginUser
上设置诸如HttpContext.Session
之类的变量,并在Tested Controller中获得它。
我的控制器:
[HttpGet, Route("SomeTestedApi")]
public async Task<ActionResult<bool>> SomeTestedApi(int id)
{
try
{
var sessionUser = HttpContext.Session.Get<LoginUser>("loginUser");
}
}
我的xUnit测试:
[Fact]
public async Task ChangeMySupplierTest()
{
try
{
LoginUser loginUser = await login();
_httpContext.Session.Set("loginUser", loginUser);
var request = "/api/SomeTestedApi/?id=5";
var response = await _client.GetAsync(request);
Assert.Equal(response.ReasonPhrase, "OK");
}
}
如果Controller通过实数HTTP request
调用,则在执行LoginController
之后调用它。在这种情况下,SessionContext.Session
对象已经收到一个值。
但是在通过测试调用时,并没有真正保留HttpContext.Session
,所以我得到了NULL
。
有没有办法做到这一点?