PHPUnit:如何测试方法尚未被称为“尚未”,但稍后将在测试用例中调用?

时间:2015-09-23 09:16:18

标签: php unit-testing phpunit

我需要测试一个方法在测试用例中的某个时刻没有调用,但是应该稍后调用。这是一个示例测试:

<?php

class B {
    public function doSomething() {}
}

class A {
    private $b;
    private $buffer = array();

    public function __construct($b) {
        $this->b = $b;
    }

    public function x($val) {
        $this->buffer[] = $val;

        if (count($this->buffer) == 3) {
            $this->b->doSomething();
        }
    }
}

class XTest extends PHPUnit_Framework_TestCase {
    public function testB() {
        $b = $this->getMock('B');
        $a = new A($b);

        $a->x(1);
        $a->x(2);

        // doSomething is not called YET
        $b->expects($this->never())->method('doSomething');

//      $b->expects($this->at(0))->method('doSomething'); // ??????

        $a->x(3);
    }
}

1 个答案:

答案 0 :(得分:0)

在您的情况下,我认为没有必要这样做。另外,我也没有办法检查以前的电话。我宁愿检查参数flush()是否执行:

$b = $this->getMock('B');
$b->expects($this->exactly(1))
    ->method('flush')
    ->with(array(1, 2, 3));

$a = new A($b);

$a->x(1);
$a->x(2);
$a->x(3);

通常,如果调用其他模拟方法,则需要检查以前的方法,您可以通过告诉模拟方法确切地调用它们at()来调用它们。