在抛出预期的异常后如何进行其他测试?

时间:2017-01-09 19:53:33

标签: php unit-testing phpunit

我需要验证对象的状态是否不受预期会产生错误的mutator调用的影响。我以为我能做到:

function testWhatever(){
   try{
      // setup $obj
      $this->expectException(WhateverException::CLASS);
      // code that throws
   }finally{
      // assert that $obj's state is still valid
   }
}

但我立即意识到,如果finally中的代码也因任何原因而抛出,它肯定会在PHPUnit中产生一些问题(确实如此)。

在抛出异常之后,我可以选择执行某些断言,可能没有过于杂乱的try / catch / rethrow而且没有重复"抛出的代码"两次?具有与以下相同功能的东西,这是不允许的:

function testWhatever(){
   try{
      // setup $obj
      $this->expectException(WhateverException::CLASS);
      // code that throws
   }finally{
      $this->expectException(null); 
      // assert that $obj's state is still valid
   }
}

2 个答案:

答案 0 :(得分:1)

您可以使用普通的try / catch / finally

function testFoobar()
{
    // setup code
    try {
        // code that throws
        $this->fail("Code didn't throw!");
    } catch (ExpectedException $e) {
        // verify exception message
    } finally {
        // verify other things
    }
}

答案 1 :(得分:0)

您可以使用两个测试并使它们相互依赖(只需在Exception上成功完成第一次测试

/**
 * @depends testWhatever
 */
public function testSomethingAfterException() {
     // more tests to run
}