首页 / 知识
关于c#:模拟方法结果
2023-04-17 00:50:00

Mocking method results我试图找到一种方法来伪造从另一个方法中调用的方法的结果。 我有一个" LoadData"方法,该方法调用一个单独的帮助程序以获取一些数据,然后将其转换(我有兴趣测试转换后的结果)。 所以我有这样的代码:
我想从Helper.GetSomeData()方法获得已知结果。我可以使用模拟框架(我对Rhino Mocks的经验有限,但可以接受任何东西)来强制达到预期的结果吗?如果是这样,如何? * Edit-是的,正如我所料,我无法实现我想要的hack,我必须找到一种更好的方式来设置数据。 您在那里遇到问题。我不知道这是否是代码的简化方案,但是如果以这种方式使用Helper类,则您的代码不可测试。首先,直接使用Helper类,因此您不能用模拟代替它。其次,您要调用静态方法。我不了解C#,但是在Java中,您无法覆盖静态方法。 您必须进行一些重构,才能使用伪GetSomeData()方法注入模拟对象。 在此简化的代码版本中,很难给您一个直接的答案。您有一些选择:
提防只创建一个到Helper类的接口并通过方法注入它。这可以公开实现细节。为什么客户端应该提供实用程序类的实现来调用简单操作?这将增加MyClass客户端的复杂性。 我建议将您拥有的东西转换为如下形式:
现在您的课程支持所谓的依赖注入。这允许您注入帮助程序类的实现,并确保您的类只需要依赖于接口。当您进行模拟时,您只需创建一个使用IHelper接口的模拟并将其传递给构造函数,您的类就将使用它,就好像它是真正的Helper类。 现在,如果您被困在使用Helper类作为静态类,那么我建议您使用代理/适配器模式,并将静态类包装到另一个支持IHelper接口的类中(您还需要创建一个)。 如果您想进一步进行此操作,则可以从修订的类中完全删除默认的Helper实现,并使用IoC(控制反转)容器。如果这对您来说是新手,我建议您首先关注为什么所有这些麻烦都值得一去的基本原理(恕我直言)。 您的单元测试将类似于以下伪代码:
如有任何疑问,请随时发表评论。 (顺便说一句,我不知道这段代码是否能正常工作,我只是在浏览器中键入了代码,所以我主要是在说明概念)。 您可能想研究Typemock隔离器,它可以"伪造"方法调用,而不会强迫您重构代码。 罗伊 据我所知,您应该为Helper对象创建一个接口或一个基本抽象类。使用Rhino Mocks,您可以返回所需的值。 或者,您可以为LoadData添加一个重载,该重载接受通常从Helper对象检索的数据作为参数。这甚至可能更容易。 我会尝试这样的事情:
这样,您可以使用例如最小起订量来模拟助手类。 是的,模拟框架正是您所需要的。您可以记录/安排希望某些模拟/存根类返回的方式。 Rhino Mocks,Typemock和Moq都是不错的选择。 Steven Walther最初使用Rhino Mocks的文章对我有很大帮助。 |
最新内容
相关内容
linux调用函数的命令?
linux调用函数的命令?,系统,代码,策略,上调,时间,设计,通信,网络,设备,项目,如何在Linux内核里增加一个系统调用?在一个进程中创建3个线程,名字linux转换字符集命令?
linux转换字符集命令?,系统,名称,时间,位置,服务,文件,字符集,命令,格式,以下,如何在Linux系统实现字符编码转换首先我们打开系统并使用root账linux外部命令调用?
linux外部命令调用?,系统,软件,标准,命令,盘中,管理,外部,进程,程序,内存,linux借用外部命令expr,实现计算器功能,利用管道,进程你得装一个callinux怎么调用命令行?
linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,linux怎么打开命令行窗口1、在Linux系统中,打开命令行窗口需要使用浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目linux模拟请求命令?
linux模拟请求命令?,地址,工作,系统,工具,信息,标准,命令,目录,发行,数据,linux怎么加端口url请求在/etc/services中添加端口以及对应进程名及linux系统命令调用?
linux系统命令调用?,系统,单位,工具,工作,管理,地址,权威,密码,电脑,信息,怎么把linux系统的命令行打开在Linux系统中,打开命令行窗口需要使用linux调用上一条命令?
linux调用上一条命令?,系统,命令,一致,数字,名称,网上,电脑,目录,空格,终端,linux返回上一级的命令是什么?怎么写?首先在电脑中,打开linux系统linux命令行调用程序?
linux命令行调用程序?,工具,环境,代码,初级,工程,系统,网上,服务,管理,发行,linux下如何运行程序?1、,首先去运行perl-v命令查看您的linux系统