Moq:无法施放

时间:2010-05-05 15:51:18

标签: c# moq

我有以下嘲笑:

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

2 个答案:

答案 0 :(得分:8)

同样的原因这不起作用

class WoodDuck : IQuack {}
class RealDuck : IQuack {}
//
IQuack myQuacker = new WoodDuck();
RealDuck myDuck = (RealDuck) myQuacker;

答案 1 :(得分:4)

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