首页 / 知识
关于tdd:RhinoMocks:模拟属性获取器的正确方法
2023-04-16 07:08:00

RhinoMocks: Correct way to mock property getter我是RhinoMocks的新手,除了了解引擎盖下发生的事情之外,还尝试掌握语法。 我有一个用户对象,我们将其称为User,它具有名为IsAdministrator的属性。 IsAdministrator的值是通过另一个检查用户安全权限的类评估的,并根据这些权限返回true或false。 我正在尝试模拟此User类,并假冒IsAdministrator的返回值以隔离某些单元测试。 到目前为止,这是我正在做的事情:
现在,我期望Rhino可以"伪造"对属性获取器的调用,然后将true返回给我。 这不正确吗? 目前,由于IsAdministrator属性中的依赖性,我遇到了异常。 有人可以在这里解释我如何实现我的目标吗? 在我跳到此之前,请快速注意一下。通常,您要避免使用"严格"模拟,因为它会使测试变脆。如果发生任何未明确告知Rhino会发生的事件,则严格的模拟将引发异常。另外,我认为您打电话创建模拟游戏时可能会误解Rhino的行为。可以将其视为自定义对象的派生对象,或实现您定义的System.Type。如果您自己进行操作,则将如下所示:
由于IsAdministrator可能只是User类型的公共属性,因此您不能在继承类型中覆盖它。 就您的问题而言,有多种方法可以解决此问题。您可以将IsAdministrator实现为用户类上的虚拟属性,如aaronjensen所述,如下所示:
这是一种不错的方法,但前提是您打算从User类继承。同样,如果您不想在该类上伪造其他成员,那么他们也必须是虚拟的,这可能不是您想要的行为。 实现此目的的另一种方法是通过使用接口。如果确实是您要模拟的User类,那么我将从中提取一个接口。您上面的示例如下所示:
如果需要,可以通过使用依赖项注入和IOC来获得更高的要求,但是基本原理是完全相同的。通常,无论如何,您都希望类依赖于接口而不是具体的实现。 我希望这有帮助。我已经在一个大型项目上使用RhinoMocks很长时间了,所以请随时向我询问有关TDD和模拟的问题。 确保IsAdministrator是虚拟的。 另外,请确保您调用_mocks.ReplayAll() _mocks.ReplayAll()将不执行任何操作。只是因为您使用的是SetupResult.For()而不算在内。使用Expect.Call()确保代码正确无误。 |
最新内容
相关内容
linux命令所有用户?
linux命令所有用户?,系统,密码,信息,情况,名称,命令,用户,时间,地址,位置,如何查询linux系统中所有用户的用户名和密码首先进入到linux桌面,在linux命令进入用户?
linux命令进入用户?,系统,密码,用户,地址,信息,软件,命令,用户名,联系方式,电脑,linux进入第一次启动+怎么样创建用户?1、进入Linux系统,登陆管linux命令用户管理?
linux命令用户管理?,系统,密码,管理,工作,信息,地址,工具,命令,用户,基础,LInux用户管理查看/etc/group文件,只存在名称为modifiedgroup的用户linux用户与组的命令?
linux用户与组的命令?,管理,系统,名称,用户组,密码,用户,命令,情况,信息,单位,Linux里面groups+用户命令作用是什么?1、在Linux中,用户组是一种linux添加用户的命令?
linux添加用户的命令?,密码,系统,软件,联系方式,用户,新增,信息,管理人员,命令,用户名,linux添加用户名1、打开xshell软件,远程访问您的服务器linux查看用户权限命令?
linux查看用户权限命令?,系统,信息,时间,命令,密码,数字,状态,名称,设备,文件,linux查看文件权限?1、打开linux系统,在linux的桌面的空白处右击linux看系统用户命令?
linux看系统用户命令?,系统,信息,密码,命令,服务,名称,网络,情况,软件,工具,Linux查看所有用户用什么命令输入“cat /etc/passwd”命令查看所linux赋权用户命令?
linux赋权用户命令?,系统,密码,用户,权限,地址,状态,数字,软件,管理,电脑,Linux系统下用户以及权限管理字段5:用户信息记录字段 字段6:用户的家linux命令中添加用户?
linux命令中添加用户?,系统,密码,软件,用户,命令,信息,目录,用户名,账号,文件夹,linux添加用户名1、打开xshell软件,远程访问您的服务器或虚拟linux命令更改用户?
linux命令更改用户?,系统,密码,管理,用户,命令,环境,工作,地址,电脑,文件,linux如何更改用户名?1、首先打开linux的终端,输入指令修改用户名,简linux修改用户名命令?
linux修改用户名命令?,系统,密码,查询系统,代码,数字,用户名,命令,第三,电脑,第一,linux怎样修改用户名和主机名以 root 用户登录系统或者使用linux命令给用户授权?
linux命令给用户授权?,系统,数字,管理,权限,命令,密码,工具,时间,软件,信息,linux怎样给普通用户设置权限添加用户 添加账号就是在系统中创建