PHPUnit存根 - 使预期调用独立于调用顺序

时间:2013-09-26 20:26:08

标签: php phpunit

我有以下单元测试代码:

$map = [
   'key1' => 'A',
   'key2' => 'B'
]; 

$stub = $this->getMockBuilder('Phalcon\Session\Bag')
    ->setConstructorArgs([$sessionNamespace])
    ->getMock();

$stub->expects($this->at(0)) // Always called first by: new Phalcon\Session\Bag()
    ->method('setDI')
    ->will($this->returnCallback(function($di) {
        $this->di = $di;
}));

$stub->expects($this->at(1)) // First, we're checking if session key is set
    ->method('__isset')
    ->will($this->returnCallback(function($sessionKey) {
        // Yes, always set
        return true;
    }));

$stub->expects($this->at(2)) // Then, we're fetching it
    ->method('__get')
    ->will($this->returnValueMap($map));

我试图在Phalcon \ Session \ Bag上调用__isset($ key)或__get($ key)时返回映射值。

首次调用,一切都按预期工作:

$bag = new Phalcon\Session\Bag('someNamespace');
$var1 = (isset($bag->key1)) ? $bag->key1 : null; // $val1 is 'A'

但是,所有后续调用都返回NULL:

$var2 = (isset($bag->key2)) ? $bag->key2 : null; // $val1 is NULL
$var3 = (isset($bag->key1)) ? $bag->key1 : null; // $val1 is NULL

显然,问题在于 - > at(0 | 1),这些是位置索引。

我尝试用 - > any()替换 - >(),但没有运气 - 我得到了PHPUnit断言错误“无法断言两个字符串相等。” - 预期“__isset”与实际“setDI”不匹配。

问题:

无论调用顺序如何,如何判断存根的预期方法是否有效?

谢谢, Temuri

0 个答案:

没有答案