一个(或几个)关于 phpunit 中方法 at() 的例子

An example (or several) about method at() in phpunit

谁能告诉我 phpunit 测试双打中 at 方法的示例。我不明白它的用途是什么?

at() 函数的目的是指定调用 mock 上的方法的顺序。如果您要使用 once()exactly(),则无论调用方法的顺序如何,测试都会通过,因为 PHPUnit 仅检查它们是否在测试期间被调用,而不是何时调用。

例如:

class FooTest extends PHPUnitTestCase {
    public function testProperOrderOfMethods() {
         $mockObject = $this->getMockBuilder('BarObject')
             ->setMethods(['baz', 'boz'])
             ->getMock();

         $mockObject->expects($this->at(0))
             ->method('boz');

         $mockObject->expects($this->at(1))
             ->method('bar');

         $sut = new Foo();
         $sut->methodBeingTested($mockObject);
}

这要求我们的函数需要看起来像:

public function methodBeingTested($dependecy) {
    $dependency->boz();
    $dependency->bar();
}

如果更改函数顺序,将会失败。

一个示例用例可能是您的 class 正在使用连接到服务并检索数据的对象。您可能希望打开连接、检索数据,然后关闭连接。或者它可能需要根据响应做出进一步的请求。无论哪种方式,所有这些操作都需要以特定顺序发生,因此在您的测试中,您将使用 at().