2014-07-21 56 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块将需要被嘲笑。如果没有,那么你将课程设置为满足条件,以便抛出异常。