PHPUnit:如何强制程序退出特定错误

时间:2017-01-10 15:35:48

标签: phpunit

如何强制PHPUnit完全停止运行并在满足特定条件(我自己选择的错误)时退出?实际上,我需要的是类似下面的东西,除了实际上PHPUnit陷阱exit()并继续运行而不是退出。

// PHPUnit does not alter existing but empty env vars, so test for it.
if (strlen(getenv('APP_HOME')) < 1) {
    $this->fail('APP_HOME set but empty.');
    exit(1);  // <-- Does not work.
}

注意:我希望继续正常运行其他错误和失败,因此在我的XML文件中设置stopOnError="true"stopOnFailure="true"不是我需要的。

1 个答案:

答案 0 :(得分:1)

我认为您可以通过执行一些覆盖并向基本测试用例类添加一些自定义行为来实现此目的。

修改

运行以下代码后,OP发现,调用exit(1);而非$result->stop()将导致此时正确终止测试。

尝试以下方法:

class MyBaseTestCase extends \PHPUnit_Framework_TestCase
{
    // Test this flag at every test run, and stop if this has been set true.
    protected $stopFlag = false;

    // Override parent to gain access to the $result so we can call stop()
    public function run(\PHPUnit_Framework_TestResult $result = null)
    {
        $result = parent::run($result);
        if ($this->stopFlag === true)
        {
            //$result->stop(); // Stop the test for this special case
            exit(1); // UPDATED: This works to terminate the process at this point
        }
        return $result; // return as normal
    }
}

然后在测试用例类中:

class MyTestCase extends MyBaseTestCase
{
    public function testThisStopsPhpunit()
    {
        if (strlen(getenv('APP_HOME')) < 1) {
            $this->fail('APP_HOME set but empty.');
            $this->stopFlag = true; // Stop further processing if this occurs
        }
    }
}