2013-01-03 30 views
0

我正在为phpunit进行自定义测试侦听器,并且在完成后我无法获得测试的状态。在测试结束后,当我在测试中调用getStatus()时,我得到的是null而不是状态。我已经在一些测试中尝试了这一点,其中一个不完整,一个失败,但getStatus()对所有测试都返回null。phpunit的自定义侦听器的测试状态为空

我使用PHPUnit的版本3.7.10

这里是我的测试监听器代码:

class MyTestListener implements PHPUnit_Framework_TestListener 
{ 
    protected $tests = array(); 

    public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) {} 
    public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) {} 
    public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time) {} 
    public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time) {} 
    public function startTest(PHPUnit_Framework_Test $test) {} 
    public function endTest(PHPUnit_Framework_Test $test, $time) { 
     $this->tests[] = array('test'=>$test, 'time'=>$time); 
      $status = $test->getStatus(); 
      //NOTE: $status is null 
    } 
    public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {} 
    public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {} 

    public function __destruct() { 
     foreach($this->tests as $d) { 
      $test = $d['test']; 
      $time = $d['time']; 

      $testClass = get_class($test); 

      $status = $test->getStatus(); 
      //NOTE: $status is null here 
      if($status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) { 
       $status = "fail - "; 
      } else if($status == PHPUnit_Runner_BaseTestRunner::STATUS_SKIPPED) { 
       $status = "skip - "; 
      } else if($status == PHPUnit_Runner_BaseTestRunner::STATUS_INCOMPLETE) { 
       $status = "inc - "; 
      } else if($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR) { 
       $status = "err - "; 
      } else { 
       $status = $status."ok - "; 
      } 

      print $status.$testClass."::".$test->getName()." ".round($time,1)." seconds\n"; 

     } 
    } 
} 

任何人有什么我做错了任何想法?

回答

2

接口PHPUnit_Framework_Test甚至没有getStatus()方法,所以您可能遇到更多问题。在add*()方法中更好地捕获结果。

看看PHPUnit/TextUI/ResultPrinter.php,它是这样做的。