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

时间:2015-12-10 14:36:38

标签: php stub codeception

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

  

“检查方法是否至少被调用过一次。如果调用次数为0,则会在验证时抛出异常。”

但是当我尝试使用它时,无论我是否评论对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 个答案:

答案 0 :(得分:4)

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

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