2017-08-14 61 views

回答

3

at()函數的用途是指定應該調用模擬方法的順序。如果您要使用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(); 
} 

若功能順序發生了變化會失敗。

示例用例可能是您的類正在使用連接到服務並檢索數據的對象。您希望打開連接,檢索數據,然後關閉連接。或者可能需要根據響應提出進一步的請求。無論哪種方式,所有這些操作都需要按照特定的順序進行,因此在您的測試中,您可以使用at()

相關問題