使用phpunit的自定义侦听器,测试状态为null

时间:2013-01-03 19:29:36

标签: php phpunit

我正在为phpunit开发自定义测试监听器,并且在完成后我无法获得测试的状态。当我在测试完成后调用getStatus()时,我得到null而不是状态。我已经尝试了一些测试,其中一个传递,一个是不完整的,一个失败,但getStatus()为所有测试返回null。

我正在使用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";

        }
    }
}

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

1 个答案:

答案 0 :(得分:2)

界面PHPUnit_Framework_Test甚至没有getStatus()方法,因此您可能会遇到更多问题。更好地捕获add*()方法中的结果。

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