我使用的是带有Ruby1.9.3的minitest版本如何使用它测试模拟的多次调用?我需要类似的东西mockObject.expect.times(2):method,[return_1firsttime,return_2secondtime]mockObject.verify有什么办法可以实现吗? 最佳答案 您需要调用expect每次调用该方法。mockObject.expect:method,return_1,[first,time,args]mockObject.expect:method,return_2,[second,t
我想测试是否使用特定参数递归调用方法。我的方法:classRecursabledefrec(arg)rec(7)unlessarg==7endenddescribeRecursabledoit"shouldrecurse"dor=Recursable.new('test')r.should_receive(:rec).with(0).orderedr.should_receive(:rec).with(7).orderedr.rec(0)endend出乎意料的是,RSpec失败了:expected:recwith(7)once,butreceivedit0times知道我的方法有什么问
在我实际操作的简化示例中,假设我有2次对数据库的调用:Repo.add(something_stringy)Repo.remove(something_floaty)我想对数据库调用使用mock,因为真正的调用将在别处进行测试:let(:repo){repo=double("Repo")repo.should_receive(:add).with(instance_of(String))repo.should_receive(:remove).with(instance_of(Float))repo}before{FakeKlass.const_set:Repo,repo}这一切都很好
我想使用RSpec模拟来为block提供固定输入。ruby:classParserattr_accessor:extracteddefparse(fname)File.open(fname).eachdo|line|extracted=lineifline=~/^RCSfile:(.*),v$/endendendR规范:describeParserbeforedo@parser=Parser.new@lines=mock("lines")@lines.stub!(:each)File.stub!(:open).and_return(@lines)endit"shouldextracta
我有一个函数,它接受一个block,打开一个文件,产生并返回:defstart&block.....dosomestuffFile.open("filename","w")do|f|f.write("something")....dosomemorestuffyieldendend我正在尝试使用rspec为其编写测试。我如何stubFile.open以便它将对象f(由我提供)传递给block而不是尝试打开实际文件?像这样的东西:it"shouldtestsomething"domyobject=double("File",{'write'=>true})File.should_rece
我想创建一个充当特定类的对象,例如Fixnum,但不是该类或其子类的实例。这有多种用例。在Fixnum案例中,我想定义一个更具体的整数类型,它本质上是Fixnum但也实现了一些额外的逻辑。我不能对Fixnum本身进行子类化,因为不能对Fixnum和Symbol等直接类型进行子类化。另一个用例是在自动化测试中进行模拟:有时您想要创建一个对象,它的行为类似于某个类(通常是模型实例),但出于技术原因不是该类的实例。下面是如何创建一个特定的整数类型,将所有方法委托(delegate)给一个内部存储的fixnum:require'delegate'require'forwardable'#int
我在一个ruby项目中使用rspec进行测试,我想说明在使用-q选项时我的程序不应输出任何内容。我试过:Kernel.should_not_receive:puts当有输出到控制台时,这并没有导致测试失败。如何验证文本输出的缺失? 最佳答案 puts在内部使用$stdout。由于它的工作方式,最简单的检查方法是简单地使用:$stdout.should_not_receive(:write)检查没有按预期写入标准输出。Kernel.puts(如上所述)只会导致测试失败被明确地这样称呼(例如Kernel.puts“Sometext”
是否有Ruby'sVCR的java替代品??据我所知,使用VCR的好处是巨大的,您可以运行“集成测试”并记录结果,将它们存储在本地某个地方。现在,从下次需要运行测试时起,您可以使用第一次运行时记录的数据模拟实际数据库命中。Java世界中有类似的东西吗?如果没有,如果我尝试实现它可能会遇到什么样的瓶颈?VCR只记录HTTP交互,但是否可以采用这种方法来记录,比如对其他团队的API的任何类型的数据库操作/函数调用,我不需要测试,基本上这将使我免于模拟所以通过自动化来完成很多事情。Here是带有Ruby单元测试的VCR示例: 最佳答案 查
如何在我的项目中模拟自写模块的模块功能?给定模块和功能moduleModuleA::ModuleBdefself.my_function(arg)endend这叫做像ModuleA::ModuleB::my_function(with_args)当它在我正在为其编写规范的函数中使用时,我应该如何模拟它?将它加倍(obj=double("ModuleA::ModuleB"))对我来说毫无意义,因为该函数是在模块上调用的,而不是在对象上调用的。我试过对它进行stub(ModuleA::ModuleB.stub(:my_function).with(arg).and_return(somet
我读了GrowingObject-OrientedSoftware,GuidedbyTests史蒂夫·弗里曼和纳特·普赖斯的作品,给人留下了深刻的印象。我想在我使用RSpec的Rails项目中采用本书的思想,尽管它的示例是用Java编写的。本书的一个基本原则是我们应该模拟接口(interface)而不是具体类。他们说我们可以通过提取接口(interface)并命名来改进应用设计。但是,Ruby没有任何语法等同于Java的接口(interface)。我如何将他们的技术用于Rails项目?更新例如,在第126页作者引入了Auction接口(interface)来实现bid方法。首先,他们模