草庐IT

PHPUnit Mock 稍后改变期望

coder 2024-01-01 原文

我有一个简单的用例。我想要一个 setUp 方法,它会导致我的模拟对象返回一个默认值:

$this->myservice
        ->expects($this->any())
        ->method('checkUniqueness')
        ->will($this->returnValue(true));

但是在一些测试中,我想返回一个不同的值:

$this->myservice
        ->expects($this->exactly(1))
        ->method('checkUniqueness')
        ->will($this->returnValue(false));

我过去使用过用于 C++ 的 GoogleMock,它有“returnByDefault”或其他东西来处理它。我不知道这在 PHPUnit 中是否可行(没有 api 文档,代码很难通读以找到我想要的东西)。

现在我不能只是将 $this->myservice 更改为一个新的模拟,因为在设置中,我将它传递给其他需要模拟或测试的东西。

我唯一的其他解决方案是我失去了设置的好处,而是必须为每个测试构建我的所有模拟。

最佳答案

您可以将 setUp() 代码移动到另一个具有参数的方法中。然后从 setUp() 调用此方法,您也可以从您的测试方法调用它,但使用与默认参数不同的参数。

关于PHPUnit Mock 稍后改变期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165831/

有关PHPUnit Mock 稍后改变期望的更多相关文章

  1. ruby-on-rails - 在 RSpec 中,如何以任意顺序期望具有不同参数的多条消息? - 2

    RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)

  2. ruby - 改变替换的大小写 - 2

    我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}

  3. ruby - 为什么我不能改变 self 的值(value)? - 2

    为什么我可以这样改变“self”:self.map!{|x|x*2}或者这样:self.replace(self.map{|x|x*2})但不是这样:self=self.map{|x|x*2}为什么Ruby不允许我更改“self”变量指向的对象,但允许我更改对象的属性? 最佳答案 不是答案,只是一个线索。a=[1,2]=>[1,2]a.object_id=>2938a.map!{|x|x*2}=>[2,4]a.object_id#differentdatabutstillthesameobject=>2938a.replace(a.

  4. ruby - 为什么括号内的换行符会改变算术结果? - 2

    为什么下面的表达式会这样解析?括号的优先级应该高于换行符,不是吗?3-(1+1)#=>13-(1+1)#=>2省略加号也会让表达式计算为2:3-(11)#=>2如果我声明为连续的换行符(转义)或将加号移动到第一行,则会实现所需的行为:3-(1\+1)#=>13-(1+1)#=>1 最佳答案 这是因为Ruby将新行识别为表达式的结尾,除非表达式不完整。例如,(1+1)与相同(1;+1)这与+1相同,因为返回了括号内的最后一个表达式。这进一步与1相同。如果行尾有+,则表达式不完整,因此会继续到下一行。这使得:3-(1+1)被解释为3-(

  5. ruby-on-rails - 设计 Controller 如何改变布局? - 2

    这个问题在这里已经有了答案:differentlayoutforsign_inactionindevise(8个答案)关闭7年前。如何更改设计Controller中的布局?

  6. ruby - RSpec:期望引发错误的方法失败 - 2

    我正在尝试测试在特定条件下是否正确引发错误。在此规范中,出现了错误,但测试仍然失败。我做错了什么?require'spec_helper'describeUSBTeensyRendererdocontext'whenthecorrectUSBportnameisnotpresent'doit'raisesanerroroninstantiation'doexpect(renderer=USBTeensyRenderer.new).toraise_error(USBInitError)endendend以及“bundleexecrspec”的终端输出:Failures:1)USBTeen

  7. ruby - 我可以告诉 Ruby 方法期望特定的参数类型吗? - 2

    defdoSomething(value)if(value.is_a?(Integer))printvalue*2elseprint"Error:Expectedintegervalue"exitendend我可以告诉Ruby方法某个参数应该是一个整数,否则会崩溃吗?像Java。 最佳答案 不,你不能。您只能做您已经在做的事情:自己检查类型。 关于ruby-我可以告诉Ruby方法期望特定的参数类型吗?,我们在StackOverflow上找到一个类似的问题: h

  8. ruby-on-rails - Rails 3.2.13 与 Rails 4.0.1 - 改变了吗?方法变了? - 2

    我最近注意到ActiveRecord对象上的方法changed?在Rails3.2.13和Rails4.0.1之间发生了变化。问题在于连接到数据库中整数字段的字段。假设我的模型Model带有number整数字段:#Rails3.2.13m=Model.lastm.number#=>5m.number='5hello'm.number#=>5m.number_changed?#=>truem.changed?#=>truem.changes#=>{:number=>[5,5]}#Rails4.0.1m=Model.lastm.number#=>5m.number='5hello'm.nu

  9. ruby-on-rails - RSpec load_missing_constant,期望 X 定义 Y(确实如此) - 2

    当我们运行时bundleexecrake规范尝试加载环境时出现错误:...gems/activesupport-3.2.8/lib/active_support/dependencies.rb:503:in`load_missing_constant':Expected...app/models/links/category.rbtodefineLinks::Category(LoadError)文件app/models/links/Category.rb确实定义了Links::Category。更奇怪的是,在guard和spork下运行时不会发生错误(我们运行测试的标准方式):bun

  10. ruby-on-rails - Rails 语法错误 : unexpected keyword_ensure, 期望输入结束 - 2

    我是Rails的新手,我尝试根据教程创建一个论坛应用程序。这是我的论坛页面,但我一直收到错误消息:syntaxerror,unexpectedkeyword_ensure,expectingend-of-inputExtractedsource(aroundline#33):3031这是抛出错误的论坛索引页面:ForumLastPosttopicsagobynoposts-->'Areyousure?',:method=>:delete%> 最佳答案 -->这是在做什么?一个html注释的ERB标签仍然会评估。去掉它。如果您想评论r

随机推荐