我需要测试一个方法在测试用例中的某个时刻没有调用,但是应该稍后调用。这是一个示例测试:
<?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);
}
}
答案 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()
来调用它们。