2012-11-16 116 views
1

我想模擬一個類構造函數所需的服務。我有一個PHPUnit異常:MyService是必需的,Mock_MyService_0afc7fc1給出。是否可以嘲笑我們自己的服務?

但是使用Request,EntityManager或其他Symfony 2組件,我沒有這個問題。

這裏是我的類的構造:

use Acme\Bundle\Service\MyService; 
use Symfony\Component\HttpFoundation\Request; 

... 

public function __construct(MyService $service, Request $request) 
{ 

和我的模擬:

... 

$service = $this->getMock('MyService'); 

$class = new Class($service, $request); 

這是不可能的嘲笑我們自己的服務?只有Symfony 2組件?

PS:如果我刪除MyService那樣:public function __construct($service, Request $request),這個工作。但我想我的定義變量,它:(

回答

1

的問題是PHPUnit的在測試執行時無法找到(或自動加載)您MyService類。

這意味着,你可能會碰到與其他懲戒庫同樣的問題,因爲所有這些問題都需要原班存在掃描並創建模擬。

這是因爲你需要告訴PHPUnit的完全合格的類名稱。

將您的代碼更改爲$this->getMock("\Acme\Bundle\Service\MyService");,它應該可以解決。

(儘管如此,嘲笑一試。這是一個很好的庫)

+0

如果你有自動加載設置,它的工作原理沒有完整的路徑,但! – markus

+0

謝謝你的回答! +1 – rgazelot

+0

@ markus-tharkun它的作用是「嘲弄某些東西」,但它無法爲您提供正確的方法並擴展到同一個類。 PHPUnit沒有意識到類定義的名稱空間,並且它不能解析測試類中的任何使用語句(因爲這需要靜態代碼分析)。通過https://wiki.php.net/rfc/class_name_scalars,這看起來很不錯:'MyService :: class'而不是長路徑。但現在我不知道替代品:)(糾正我,如果我錯了,錯過了什麼) – edorian