Pic*_*els 5 c# asp.net-mvc moq
我今天早些时候问过这个问题.
因此,由于moq从一个接口创建它自己的类,我无法将它转换为另一个类.
所以它让我想知道如果我创建了一个ICustomPrincipal并尝试强制转换它.
这是我的嘲笑的样子:
var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<ICustomPrincipal>();
MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
Run Code Online (Sandbox Code Playgroud)
在我试图测试以下代码的方法给出错误(再次):
var user = (ICustomPrincipal)httpContext.User;
Run Code Online (Sandbox Code Playgroud)
错误如下:
Unable to cast object of type 'IPrincipalProxy4081807111564298854aabfc890edcc8'
to type 'MyProject.Web.ICustomPrincipal'.
Run Code Online (Sandbox Code Playgroud)
我想我仍然需要接口和moq的一些练习,但是我不应该将moq创建的类转换回ICustomPrincipal?我知道httpContext.User会返回一个IPrincipal,所以可能会丢失一些东西吗?
好吧,如果有人可以帮助我,我会很感激.
Pickels
编辑:
根据要求,我正在测试的方法的完整代码.它仍然没有完成,但这是我到目前为止:
public bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
var user = (ICustomPrincipal)httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:
似乎如果我使用Thread.CurrentPrincipal而不是HttpContext.current.user,我可以毫无问题地投射它.现在阅读两者之间的差异.
小智 0
我认为你需要能够将模拟注入到你的代码中......
例如,在您的班级中,如果您添加以下内容:
public static HttpContextBase HttpContext;
public static ICustomPrincipal User;
Run Code Online (Sandbox Code Playgroud)
并在您的代码中有以下内容...
var user = (ICustomPrincipal)User;
Run Code Online (Sandbox Code Playgroud)
并在您的测试类中(假设它名为 ClassUnderTest)
ClassUnderTest.HttpContextBase = MockHttpContext.Object;
Run Code Online (Sandbox Code Playgroud)
和
ClassUnderTest.User = MockPrincipal.Object;
Run Code Online (Sandbox Code Playgroud)
嗯...我认为这应该可以解决你的问题。
| 归档时间: |
|
| 查看次数: |
6466 次 |
| 最近记录: |