如何在 Codeception\Util\Stub 中正确使用 atLeastOnce 方法?

Posted

技术标签:

【中文标题】如何在 Codeception\\Util\\Stub 中正确使用 atLeastOnce 方法?【英文标题】:How to properly use atLeastOnce method in Codeception\Util\Stub?如何在 Codeception\Util\Stub 中正确使用 atLeastOnce 方法? 【发布时间】:2016-03-16 05:57:12 【问题描述】:

我正在使用 codeception 来测试我的 php 应用程序,并且有一种我不知道如何使用的方法。它被称为Stub::atLeastOnce(),就像Codeception's documentation of the Stub class 所说:

"检查一个方法是否至少被调用过一次。如果调用次数为0,则会在verify中抛出异常。"

但是当我尝试使用它时,无论我是否评论对User::getName() 的调用,测试都通过了。

我的用户类如下所示:

<?php

class User 
  public function getName() 
    return 'pepito';
  

  public function someMethod() 

  
  

而我的测试方法是这样的:

public function testStubUsage() 
    // all methods that the stub impersonates must be, at least, defined
    $user = Stub::make('User', array('getName' => Stub::atLeastOnce(function()  return 'Davert'; ), 'someMethod' => Stub::atLeastOnce('User::getName')));
    $user->getName();

那么,如果从未调用过 User::getname(),那么该函数的用途是什么?

【问题讨论】:

【参考方案1】:

文档不正确,您必须将$this 作为Stub::make() 的第三个参数传递才能正常工作:

public function testStubUsage() 
    $user = Stub::make('User', array('getName' => Stub::atLeastOnce(function()  return 'Davert';), 'someMethod' => function() ), $this); // <- Here
    $user->getName();

【讨论】:

另外,如果您使用不扩展 \PHPUnit_Framework_TestCase 的 Cest 格式(Stub::doGenerateMock(),由 Stub::make() 调用,检查如果第三个参数是\PHPUnit_Framework_TestCase 的实例,则在使用它之前)。请参阅***.com/questions/26140295/…,其中 OP 对此进行了快速而肮脏的修复。

以上是关于如何在 Codeception\Util\Stub 中正确使用 atLeastOnce 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在图像中找到明亮区域(以及如何在图像中找到阴影区域)

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?