2014-07-21 97 views
1

我想這是一個常見問題,但我無法決定如何解決這個問題。PHPUnit測試執行異常流程

我有一個公共職能,有4個catch塊。裏面每個catch塊的私有方法之一,如下

public function updateInformation(){ 

try{ 
    ..... 
    }catch(Zend_Http_Client_Exception $e){ 
    $this->somePrivateMethod1(); 
    }catch(Zend_Service_Exception $e){ 
    $this->somePrivateMethod2(); 
    }catch(UnexpectedValueException $e){ 
    $this->somePrivateMethod3(); 
    }catch(Exception $e){ 
    $this->somePrivateMethod4(); 
    } 

} 

我寫測試用例來測試updateInformation()函數被調用。我想測試一下這個異常塊,它可以讓我測試私有方法(太)。我如何實現這一目標?正因爲如此,代碼覆蓋率也沒有了。

+0

我提供了一個答案,概述了你需要做什麼的基礎知識。但是關於你正在測試的課程的更多信息將有助於提供更詳細的答案。 – Schleis

回答

0

您有一個依賴關係拋出異常,以便您的代碼能夠捕獲它。

http://phpunit.de/manual/current/en/phpunit-book.html#test-doubles.stubs.examples.StubTest8.php

public function testThrowExceptionStub() 
    { 
     // Create a stub for the SomeClass class. 
     $stub = $this->getMock('SomeClass'); 

     // Configure the stub. 
     $stub->method('doSomething') 
      ->will($this->throwException(new Exception)); 

     $sut = new Class($stub); 

     $sut->updateInformation(); 

     //DO MORE ASSERTIONS ABOUT BEHAVIOR IN PRIVATE METHODS 

    } 
} 

我假設有東西在try塊將需要被嘲笑。如果沒有,那麼你將課程設置爲滿足條件,以便拋出異常。