使用PHPUnit忽略exit()和die()

Hel*_*röm 7 php phpunit exit die

首先,标题会暗示这是这个这个的重复,但由于几个原因,这些答案对我不起作用,即使我最初的问题是相同的.我会解释原因.

我的问题是:我在我的代码中有几次我想发送标题和正文然后终止处理.与其他问题不同,我不能使用return或抛出异常(这些显然是为出于不同目的设计的不同函数而不是退出,这不是错误;它只是在某些特定情况下的早期运行时终止).

仍然,我想编写运行这些方法的单元测试,确保设置了适当的头文件(此处找到解决方案),输出主体是正确的($this->expectOutputString()在测试用例中使用-method 解决),然后继续测试.在这之间,exit意志会发生.

我已经@runInSeparateProcess在PHPUnit中尝试了-annotation,我也检查了test_helpers扩展,它有效,但我不想添加另一个扩展(建议测试也将在生产中运行)本机PHP代码打破了一切.必须有一种更简单的方法而不牺牲最佳实践.

有没有人有这个问题的好方法?

Ste*_*ott 4

我在引导程序中添加了一个变量,在极少数需要不退出的情况下,我可以使用 IF 在代码中引用该变量。

define ('PHPUNIT_RUNNING', 1); 
Run Code Online (Sandbox Code Playgroud)

正常程序:

if(! @PHPUNIT_RUNNING === 1 )
{
    exit;
}
Run Code Online (Sandbox Code Playgroud)

PHPUnit 没有被定义为规则,因此在 PHP 执行时会生成一个警告(我们用 @ 隐藏它)。然后代码将在不处于测试模式时执行我们想要的操作。这是在主代码编写后添加的我们将 PHPUnit 测试添加到现有项目中,而不是进行 TDD。

请注意:

我们尽可能少地这样做来解决遗留问题,否则我们会按照其他人的建议进行操作并抛出异常或将数据返回到父函数。