使用PHPUnit,我想知道如何從同一個存根/模擬中獲得多個期望。PHPUnit模擬多個期望()調用
例如,我想測試模擬將調用方法display()
並返回NULL。我也想測試將調用方法process()
。
其實我的測試叫做testProcessIsCalledIfDisplayReturnNull()
。
所以我需要設置相同的模擬對象2點的預期,手冊沒有真正幫助有關:(
使用PHPUnit,我想知道如何從同一個存根/模擬中獲得多個期望。PHPUnit模擬多個期望()調用
例如,我想測試模擬將調用方法display()
並返回NULL。我也想測試將調用方法process()
。
其實我的測試叫做testProcessIsCalledIfDisplayReturnNull()
。
所以我需要設置相同的模擬對象2點的預期,手冊沒有真正幫助有關:(
如果你知道,該方法被調用一次使用$這 - >一次()的預期(),否則使用這個 - $>任何()
$mock = $this->getMock('nameOfTheCalss', array('firstMethod','secondMethod','thirdMethod'));
$mock->expects($this->once())
->method('firstMethod')
->will($this->returnValue('value'));
$mock->expects($this->once())
->method('secondMethod')
->will($this->returnValue('value'));
$mock->expects($this->once())
->method('thirdMethod')
->will($this->returnValue('value'));
我已經試過這一點,似乎只要可以作爲來電訂購撐好:
$mock = $this->getMock('mockWorker', array('display', 'process'));
$mock->expects($this->exactly(1))
->method('display')
->will($this->returnValue(null));
$mock->expects($this->exactly(1))
->method('process');
您可以使用'一次()'而不是'完全(1)'。請記住,並不是在兩個期望之間創建一個排序,但它通常足夠好。如果你需要特定的順序,使用'at($ index)'。 – 2011-04-29 17:36:50
根據我的理解,只有在認爲重要時才應使用once()方法,該方法只能被調用一次 - 當調用方法多於或少於一次的代碼應該被視爲中斷。如果當前實現調用一次,但將來可以將其更改爲零或更多,然後使用any()。這使得以後更容易更改代碼。 – bdsl 2017-06-02 19:28:17