我正在嘗試使用PHPUnit測試Web服務接口類。基本上,這個類調用一個SoapClient對象。我試圖用這裏所描述的getMockFromWsdl
方法PHPUnit來測試這個類:如何在多個測試中模擬測試PHPUnit中的Web服務?
然而,因爲我想測試從同一類中的多個方法,每次我設置的對象,我也有設置模擬WSDL SoapClient對象。這導致拋出一個致命的錯誤:
Fatal error: Cannot redeclare class xxxx in C:\web\php5\PEAR\PHPUnit\Framework\TestCase.php(1227) : eval()'d code on line 15
我如何使用跨多個測試相同的模擬對象,而無需每次都重新生成它從WSDL?這似乎是問題所在。
-
已經被要求張貼一些代碼來看看,這裏的TestCase的設置方法:
protected function setUp() {
parent::setUp();
$this->client = new Client();
$this->SoapClient = $this->getMockFromWsdl(
'service.wsdl'
);
$this->client->setClient($this->SoapClient);
}
我貼一些代碼了在審查的問題。放入class_exists似乎不會解決問題,因爲您仍然必須以某種方式檢索模擬對象,並且此類將始終運行該eval。除非我要修改PHPUnit本身? 在放置class_exists()方法的地方,你有什麼想法? – scraton 2010-03-17 00:18:02
號碼停止。 PHPUnit不*需要修改。認真。你爲什麼使用eval?執行eval的類是問題。 'class_exists'檢查僅僅是一個黑客建議,以防止重新聲明一個預先存在的類。此檢查需要放在執行「評估」的班級內。 – pestilence669 2010-03-17 02:21:10
PHPUnit正在調用eval代碼,而不是我自己的代碼。我認爲它在解析WSDL並從該定義中創建模擬對象時會有所影響。 – scraton 2010-03-17 04:05:09