依赖注入和HttpContext.Current?如何使这个类可测试
本文关键字:何使这 测试 注入 HttpContext Current 依赖 | 更新日期: 2023-09-27 18:02:10
我对测试非常陌生,刚刚开始,想知道如何使我的AuthorizationService
可测试。
原因是我不能使用Ninject注入HttpContext.Current.Request到我的AuthorizationService(IHttpContext context)
,因为它没有接口。
我该怎么做?
代码public class AuthorizationService : IAuthorizationService
{
private readonly string _token;
public AuthorizationService()
{
var headerValues = HttpContext.Current.Request.Headers.GetValues("Token");
var paramValues = HttpContext.Current.Request.QueryString.GetValues("Token");
var headerToken = string.Empty;
var paramToken = string.Empty;
// ... some logic ...
this._token = headerToken;
}
/// <summary>
/// Just some random function that will return the token
/// </summary>
/// <returns></returns>
public string GetToken()
{
return this._token;
}
}
虽然HttpContext
没有接口IHttpContext
,但它有一个抽象基类HttpContextBase
,您可以使用它来模拟。
HttpContextBase
的MSDN文档
我个人更喜欢单独注入HttpRequestBase
和HttpResponseBase
,这样就可以少模仿(当然取决于你的方法)。
这是如何注入当前上下文作为贡献者参数。
kernel.Bind<IAuthorizationService>()
.To<AuthorizationService>()
.WithConstructorArgument("context", x => HttpContext.Current.Request);