gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:54:14 27 4
gpt4 key购买 nike

首先,标题表明这是 this 的副本或 this ,但出于几个原因,这些答案对我不起作用,即使我最初的问题是相同的。我会解释原因。

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

仍然,我想编写运行这些方法的单元测试,确保设置了适当的 header (找到解决方案 here ),输出正文正确(用 $this->expectOutputString( 解决) )-测试用例中的方法)然后继续测试。在此期间,exit 将发生。

我已经在 PHPUnit 中尝试了 @runInSeparateProcess-annotation,我还检查了 test_helpers扩展,它有效,但我不想为破坏所有内容的单行 native PHP 代码添加另一个扩展(请注意,测试也将在生产中运行)。在不牺牲最佳实践的情况下,必须有一种更简单的方法。

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

最佳答案

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

define ('PHPUNIT_RUNNING', 1); 

普通程序:

if(! @PHPUNIT_RUNNING === 1 )
{
exit;
}

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

请注意:

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

关于php - 使用 PHPUnit 忽略 exit() 和 die(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com