2014-08-29 52 views
2

提示我想測試一下這個方法:如何進行單元測試類型PHPUnit的

類:

public function bind(\Elastica\ResultSet $result = null) { 

    if (!$result instanceof \Elastica\ResultSet) { 
     throw new \InvalidArgumentException('I need an instance of \Elastica\ResultSet'); 
    } 

    $this->bindedData = $result->getResults(); 
    $this->isBinded = true; 
} 

測試

public function testGetTransformedDataNotSuccesful() { 

    $this->object->bind(new \stdClass()); //This throws a Catchable fatal error 

} 

我的問題是:

我如何測試這個?

另一種方法是不要鍵入提示方法var。

或者我不應該測試這個。

PHP會拋出異常而不是拋出致命錯誤嗎?

回答

4

拋出一個致命錯誤是正確的,因爲您的方法簽名明確要求\ Elastica \ ResultSet但您提供了\ stdClass。

卸下typehint也將消除致命的錯誤 - 但是這並沒有多大意義,恕我直言:)

編輯

這個測試應該通過

public function testGetTransformedDataNotSuccesful() { 
    $this->setExpectedException(get_class(new PHPUnit_Framework_Error("",0,"",1))); 

    $this->object->bind(new \stdClass()); //This throws a Catchable fatal error 

} 
+0

對不起,我忘了這個。我會更新我的問題。 – MadeOfSport 2014-08-29 14:58:55

+0

*更新了答案*問題保持不變。您強烈地鍵入\ Elastica \ ResultSet,但您傳遞了stdclass();還有什麼應該發生:) – Hirnhamster 2014-08-29 15:03:18

+0

我不知道。我希望PHP的拋出和異常不是一個可捕捉的致命錯誤或類似的東西。所以我的問題是 - 這是可測試的PHPUnit測試?你懂我的意思嗎 ? – MadeOfSport 2014-08-29 15:06:34