草庐IT

模拟实现

全部标签

ruby - 摩卡模拟进行另一项测试

我一直在关注15TDDstepstocreateaRailsapplication指南-但遇到了一个我似乎无法解决的问题。对于WordsController的功能测试,我有以下代码:classWordsControllerTest在Word类中,我有以下代码:classWord当我运行测试时,我遇到以下错误(为简洁起见缩短):1)Failure:unexpectedinvocation:Word(...).random()satisfiedexpectations:-expectedexactlyonce,alreadyinvokedonce:Word(...).random()我曾尝

ruby - 如果 Ruby 的所有实现都被编译成字节码,Ruby 真的是一种解释型语言吗?

在为thisquestionaboutBlueRuby选择的答案中,查克说:AllofthecurrentRubyimplementationsarecompiledtobytecode.ContrarytoSAP'sclaims,asofRuby1.9,MRIitselfincludesabytecodecompiler,thoughtheabilitytosavethecompiledbytecodetodiskdisappearedsomewhereintheprocessofmergingtheYARVvirtualmachine.JRubyiscompiledintoJava

Ruby:用 MiniTest 模拟类方法?

我正在使用MiniTest2.12.1(Ruby>=1.9附带的最新版本的股票测试框架),我不知道如何用它模拟一个类方法,同样的方法Mocha之类的东西是可能的,例如:product=Product.newProduct.expects(:find).with(1).returns(product)assert_equalproduct,Product.find(1)我已经涉足互联网好几天了,但我仍然没有找到一个合理的答案。请帮忙? 最佳答案 如果您坚持使用2.12.1,这可能对您没有帮助,但看起来他们在HEAD中向minitest

ruby - 如何使用 rspec 在 ruby​​ 中模拟 super?

我通过创建一个扩展到库类的子类来扩展现有的库。在子类中,我能够测试initialize方法中的大部分功能,但无法模拟super调用。子类如下所示。classChild如何编写rspec测试(使用mocha)以便我可以模拟super调用?请注意,我正在测试Child类中的initialize方法的功能。当提供额外参数时,我是否必须创建不调用super的单独代码路径? 最佳答案 你不能模拟super,你也不应该。当您模拟某些内容时,您正在验证是否收到了特定消息,而super不是一条消息——它是一个关键字。相反,弄清楚如果缺少super调

ruby - WebMock 模拟失败的 API(没有互联网,超时++)

我正在尝试使用webmock模拟WebAPI的意外行为,例如未找到服务器和超时。执行此操作的最佳方法是什么?我能想到的就是做这样的事情:stubbed_request=stub_request(:get,"#{host}/api/something.json").with(:headers=>{'Accept'=>'*/*','Content-Type'=>'application/json','User-Agent'=>'Ruby'}).to_return(:status=>[500,"InternalServerError"])这应该适用于404等问题,但我如何测试超时、未找到服务

ruby - ruby 中的模拟系统调用

知道模拟%[]的方法吗?我正在为进行一些系统调用的代码编写测试,例如:deflog(file)%x[gitlog#{file}]end并希望在测试此方法时避免实际执行系统调用。理想情况下,我想模拟%x[..]并断言已将正确的shell命令传递给它。 最佳答案 %x{…}是Ruby内置的语法,它实际上会调用内核方法Backtick(`).所以你可以重新定义那个方法。由于反引号方法返回在子shell中运行cmd的标准输出,您重新定义的方法应该返回类似的东西,例如,一个字符串。moduleKerneldef`(cmd)"call#{cmd

ruby-on-rails - rails 是如何实现 before_filter 的?

我对Rails如何实现像before_filter这样的过滤器很感兴趣。但是看了源码还是一头雾水。我注意到rails的框架维护了一个filter_chain,并在目标方法之前运行过滤器。但是,我不明白一个重要的过程:rails是如何捕获方法调用的?我的意思是,例如,我有一个类Dog,并为方法bark设置了一个before_filter。当我调用dog.bark时,rails应该以某种方式捕获此调用,并改为运行其修改后的方法。但是,我在源代码中没有找到这样的代码。任何人都可以告诉我这个想法或指出代码所在的位置吗? 最佳答案 当您设置b

ruby - 是否有针对 Ruby 的 ISO-8601 日期解析的完整实现?

Time.iso8601方法是ISO-8601的一个受限子集。它有什么局限性?有人知道Ruby的完整实现吗?我正在使用MRI1.8.7。更新看起来没有一个类可以处理所有各种8601日期和日期/时间组合。但是,我设法通过使用Date.parse和Time.iso8601方法解决了这些问题。缺点是您需要在代码中决定输入看起来像日期还是日期/时间。警告:时区差异Time.iso8601和Time.parse的行为不同。>>Time.parse("2010-09-06T12:27:00.10-05:00")=>MonSep0618:27:00+01002010>>Time.iso8601("2

ruby - 如何在 Ruby 中模拟类 Java 的注解?

如何在ruby中模拟类Java注解?(好吧,我有答案了,概括一下http://bens.me.uk/2009/java-style-annotations-in-ruby) 最佳答案 本文改编自apieceofcodeIwroteinananswertoanotherquestion几个星期前,虽然它当然不是原创的。这是一个著名的Ruby习语,毕竟它已经使用了很多年,至少从rakes的desc方法开始.moduleAnnotationsdefannotations(meth=nil)return@__annotations__[me

ruby - 一个更好的 Ruby 实现,将十进制舍入到最接近的 0.5

这看起来非常低效。谁能给我一个更好的Ruby方式。defround_valuex=(self.value*10).round/10.0#roundstotwodecimalplacesr=x.modulo(x.floor)#findsremainderf=x.floorself.value=casewhenr.between?(0,0.25)fwhenr.between?(0.26,0.75)f+0.5whenr.between?(0.76,0.99)f+1.0endend 最佳答案 classFloatdefround_point