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

关于phpunit中at()方法的一个(或几个)示例,phpunit,test-double,Phpunit,Test Double,请任何人给我举一个phpunit测试中的at方法的例子。我不明白它的用途是什么?函数的作用是指定调用mock上的方法的顺序。如果要使用一次()或精确(),则无论调用方法的顺序如何,测试都会通过,因为PHPUnit只是检查方法是否在测试期间调用,而不是何时调用 例如: class FooTest extends PHPUnitTestCase { public function testProperOrderOfMethods() { $mockObject = $thi

请任何人给我举一个phpunit测试中的
at
方法的例子。我不明白它的用途是什么?

函数的作用是指定调用mock上的方法的顺序。如果要使用
一次()
精确()
,则无论调用方法的顺序如何,测试都会通过,因为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();
}
如果更改功能顺序,则会失败


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

函数
at()
的目的是指定调用模拟上的方法的顺序。如果要使用
一次()
精确()
,则无论调用方法的顺序如何,测试都会通过,因为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();
}
如果更改功能顺序,则会失败

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