我有以下嘲笑:
var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<IPrincipal>();
MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
测试此行时发生错误:
var user = (CustomPrincipal)httpContext.User;
这是错误:
Unable to cast object of type 'IPrincipalProxy5c6adb1b163840e192c47295b3c6d696'
to type 'MyProject.Web.CustomPrincipal'.
我的CustomPrincipal实现了IPrincipal接口。那么有人可以解释为什么我会收到这个错误以及我如何解决它?
答案 0 :(得分:8)
同样的原因这不起作用
class WoodDuck : IQuack {}
class RealDuck : IQuack {}
//
IQuack myQuacker = new WoodDuck();
RealDuck myDuck = (RealDuck) myQuacker;
答案 1 :(得分:4)
你无法施放它的原因是因为MOQ正在创建自己的实现IPrinciple的类。具体来说就是IPrincipalProxy5c6adb1b163840e192c47295b3c6d696。但仅仅因为这两个类都实现了相同的接口,并不意味着你可以从一个类转换为另一个类。你为什么需要施展它?为什么不能使用MOQ提供的IPrinciple上的成员?