我对测试非常陌生,刚刚开始并且想知道如何让我的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;
}
}
答案 0 :(得分:1)
虽然HttpContext
没有interfacce IHttpContext
,但它确实有一个抽象基类HttpContextBase
,您可以将其用于模拟。
MSDN documentation for HttpContextBase
就个人而言,我更喜欢单独注入HttpRequestBase
和HttpResponseBase
,因此模仿的次数较少(当然取决于您的方法)。
答案 1 :(得分:1)
这是将当前上下文作为参与者参数注入的方式。
kernel.Bind<IAuthorizationService>()
.To<AuthorizationService>()
.WithConstructorArgument("context", x => HttpContext.Current.Request);