PHPUnit测试异常执行流程

时间:2014-07-21 09:35:27

标签: unit-testing phpunit private-members test-coverage

我想这是一个常见的问题,但我无法决定如何解决这个问题。

我有一个包含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()函数。我也想测试异常块,这样我就可以测试私有方法了。我该如何实现这一目标?因此,代码覆盖率也不见了。

1 个答案:

答案 0 :(得分: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块中有一些东西需要被嘲笑。如果没有,那么你将类设置为满足条件,以便抛出异常。