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