我需要测试一些依赖于当前上下文的静态方法。现在,我当然可以使用HttpContextWrapper
来从我自己的代码中删除这种依赖关系。问题在于我在这些方法中使用的第 3 方 API。他们依赖于HttpContext
,所以我对此无能为力。但是,我想做的是HttpContext
用我的HttpContextBase
.
所以我的代码看起来像这样:
public static bool IsSignedUpUser()
{
//This calls IsSignedUpUser with the production context
return IsSignedUpUser(new HttpContextWrapper(HttpContext.Current));
}
public static bool IsSignedUpUser(HttpContextBase context)
{
HttpCookie objCookie = SomeExternalAPIThatReliesOnHttpContextBeingSet();
return (objCookie != null)
}
我想做的是:
HttpContext.Current = context; //where context is a mocked HttpContextBase
这样,当第 3 方 API 查找HttpContext
查询字符串、cookie 值等时,它不会抛出NullReferenceException
.
为什么这不是骗子?
在被引用为欺骗的问题中的代码中,作者看起来完全控制,没有外部依赖。我正在使用依赖于的第三方库HttpContext
,我无法更改他们的方法签名以接受HttpContextBase
,所以我需要一种方法来分配我的HttpContextBase
到HttpContext
如果这是不可能的,并且到目前为止我被引导相信它不是,那么好的答案应该建议如何删除这些依赖项。500 - Internal Server Error 至少有一个好的建议。