当前位置:  开发笔记 > 编程语言 > 正文

Mock IIdentity和IPrincipal

如何解决《MockIIdentity和IPrincipal》经验,为你挑选了1个好方法。

我只是想问一下在单元测试中提供这些对象的更好方法.

在我的单元测试中,我正在测试CSLA对象.CSLA对象在内部使用一个属性和一个ApplicationUser对象的方法.ApplicationUser继承自IPrincipal.属性是:1)ApplicationContext.User.IsInRole(...) - 该方法是IPrincipal的一部分2)ApplicationContext.User.Identity.Name - 名称是IIdentity的属性,它是ApplicationUser aka IPricipal的一部分

我的测试示例(使用RhinoMock):

public void BeforeTest()
{
   mocks = new MockRepository();
   IPrincipal mockPrincipal = mocks.CreateMock();
   ApplicationContext.User = mockPrincipal;
   using (mocks.Record()) {
      Expect.Call(mockPrincipal.IsInRole(Roles.ROLE_MAN_PERSON)).Return(true);
      Expect.Call(mockPrincipal.Identity.Name).Return("ju"); //doesn't work!!!! return null ref exc
   }
}

我对第二个值,身份名称有轻微问题.我试图模仿它,但有问题将模拟的IIdentity分配给ApplicationUser,因为它是在内部完成的.我被告知要自己创建一些IIPrincipal(包括IIdentity),而不是嘲笑它.哪个可以肯定.不确定这是否可以作为Stub使用?

那么你能告诉我如何处理IPrincipal和IIdentity吗?任何建议都是最受欢迎的.



1> Randolpho..:

你得到一个空引用错误的原因IPrincipal.Identity是因为是null; 它还没有在你的嘲笑中设置IPrincipal.调用.Namenull会Identity导致异常.

答案,如卡尔顿指出,是嘲笑IIdentity ,并且将它设置为返回"菊"为它的Name属性.然后你可以告诉IPrincipal.Identity返回模拟IIdentity.

这是你的代码扩展(使用Rhino Mocks而不是Stubs):

public void BeforeTest()
{
   mocks = new MockRepository();
   IPrincipal mockPrincipal = mocks.CreateMock();
   IIdentity mockIdentity = mocks.CreateMock();
   ApplicationContext.User = mockPrincipal;
   using (mocks.Record()) 
   {
      Expect.Call(mockPrincipal.IsInRole(Roles.ROLE_MAN_PERSON)).Return(true);
      Expect.Call(mockIdentity.Name).Return("ju"); 
      Expect.Call(mockPrincipal.Identity).Return(mockIdentity);
   }
}

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有