2016-12-21 65 views
1

我有一個服務類的樣機。 它的定義是這樣的我setUp功能PHPUnit樣機問題

$this->myServiceMockup = $this->getMockBuilder(MyService::class) 
      ->disableOriginalConstructor() 
      ->setMethods(['myMethod']) 
      ->getMock(); 

在我的測試功能,我設置的期望它是這樣的。

$this->myServiceMockup->expects($this->once()) 
      ->method('myMethod') 
      ->with($this->exactly(1), 'myName') 
      ->willReturn($this->exactly(1)); 

那麼這是什麼意思是,當我應該觸發myMethod的功能只有一次,這樣它會返回整數1

所以方法我測試了該行代碼。

$myIntValue = $this->myService->myMethod($number, $name); 

此行$myIntValue後,當我運行測試應該是1和測試應該繼續,那麼這是我對這個的理解。

而是我得到這個錯誤

預期失敗的方法名是等於當 調用1時間(s)參數0調用

我\路徑\爲\類\爲MyService: :myMethod(1,'myName')不符合 預期值。

1與期望的類型「對象」不匹配。

沒有任何意義,因爲myMethod期待一個整數和一個字符串。

public function myMethod($number, $name) 
{ 
    return $this->table->save($number, $name); 
} 

有人可以向我解釋我在這裏做錯了什麼,因爲我沒有想法。

回答

2

exactly()是用於使用作爲expects()方法的自變量調用計數匹配器(像once()any())。

只需更換:

->with($this->exactly(1), 'myName') 

->with(1, 'myName') 

willReturn()也接受值 「原樣」。

2

您沒有正確使用$this->with

$this->myServiceMockup 
    ->expects($this->once()) 
    ->method('myMethod') 
    ->with($this->equalTo(1), $this->stringContains('myName')) 
    ->willReturn(1);