我一直試圖使用Mockery來聲明,在拋出異常時從另一個方法內調用方法。因此,作爲一個例子:PHP嘲笑不從模擬內部調用模擬方法
public function testOtherMethodIsCalled() {
$client = m::mock('Client');
$client
->shouldReceive('getFoo')
->andThrow(new FooNotAvailableException);
$controller = m::mock('Controller[otherMethod]');
$controller
->shouldReceive('otherMethod')
->once();
$controller->setClient($client);
$controller->firstMethod();
}
顯然,名稱已被簡化,但這是行其他各方面我有什麼相同的線。在代碼中,當FooNotAvailableException
被捕獲時,我將呼叫返回otherMethod()
。
的問題是,當運行它,我得到這個錯誤:
Mockery\CountValidator\Exception: Method otherMethod() from Controller should be called exactly 1 times but called 0 times.
這是因爲內部原,unmocked otherMethod()
被調用。如果我從測試內部調用它,像這樣:
$controller->otherMethod();
測試通過。
爲什麼會這樣,我該如何爲我想要測試的內容編寫測試?
您的示例缺少'Client'和'Controller'的類定義。 Stackoverflow要求你證明一個自包含的例子,如果你沒有提供這些定義,我們可以說這個方法沒有被缺少的定義調用。 – hakre