Moq:无法施放

Pic*_*els 2 c# moq

我有以下嘲笑:

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接口.那么任何人都可以解释为什么我会得到这个错误以及我如何解决它?

Amy*_*y B 8

同样的原因这不起作用

class WoodDuck : IQuack {}
class RealDuck : IQuack {}
//
IQuack myQuacker = new WoodDuck();
RealDuck myDuck = (RealDuck) myQuacker;
Run Code Online (Sandbox Code Playgroud)


Yur*_*ich 5

您无法转换它的原因是 MOQ 正在创建自己的实现 IPrinciple 的类。具体来说是 IPrincipalProxy5c6adb1b163840e192c47295b3c6d696。但仅仅因为这两个类实现相同的接口,并不意味着您可以从一个类转换为另一个类。为什么需要投射它?为什么不能使用MOQ提供的IPrinciple上的会员呢?