现在,为了披露,我还没有弄脏你正在使用的大部分东西,但是:
如果你想模拟 IsAuthenticated,为什么不创建一个静态类来返回一个可以被你的测试代码操作的布尔值呢?
这有点粗糙,但希望你能明白:
interface IAuthenticationChecker
{
bool IsAuthenticated { get; }
}
public class MockAuthenticationChecker : IAuthenticationChecker
{
static bool _authenticated = false;
public static void SetAuthenticated(bool value)
{
_authenticated = value;
}
#region IAuthenticationChecker Members
public bool IsAuthenticated
{
get { return _authenticated; }
}
#endregion
}
public class RequestAuthenticationChecker : IAuthenticationChecker
{
#region IAuthenticationChecker Members
public bool IsAuthenticated
{
get {
if (HttpContext.Current == null)
throw new ApplicationException(
"Unable to Retrieve IsAuthenticated for Request becuse there is no current HttpContext.");
return HttpContext.Current.Request.IsAuthenticated;
}
}
#endregion
}
然后,您可以在应用程序级别使用对任何一个的引用,是的,这意味着您必须在应用程序级别添加引用,并且您需要使用不同的 ref 而不是 Request,但您还可以完全控制身份验证以进行测试:)
仅供参考 - 这完全可以被炸开,我在大约一分钟内把它放在一起:)