为了账号安全,请及时绑定邮箱和手机立即绑定

为什么“未定义的偏移量”在一台机器上引发异常,但在另一台机器上显示通知?

为什么“未定义的偏移量”在一台机器上引发异常,但在另一台机器上显示通知?

PHP
天涯尽头无女友 2022-07-09 18:27:17
我在本地机器上得到的结果与在 Travis 上的简单测试不同。这是测试:class FooTest extends TestCase{    public function testArrayKeyUndefined(): void    {        $a = [1 => 'a', 2 => 'b', 3 => 'c'];        $this->assertEquals('a', $a[1]);        $this->assertEquals('c', $a[3]);        $this->expectException(\ErrorException::class);        $b = $a[99];    }}在我的本地机器上,测试通过了。在 Travis(使用 PHP 7.2 和 7.3)上,它不会:FooTest::testArrayKeyUndefined 未定义偏移量:99我的 phpunit.xml.dist 文件包括这个<phpunit    backupGlobals="false"    backupStaticAttributes="false"    colors="true"    convertErrorsToExceptions="true"    convertNoticesToExceptions="true"    convertWarningsToExceptions="true"    processIsolation="false"    stopOnFailure="false"    bootstrap="./src/lib/bootstrap.php">我实际上是在 Symfony 5 中使用 simple-phpunit。这会加载 PHPUnit 8.3.5其他预期真正异常的测试按预期工作。只有\ErrorException不在 Travis 工作(但仍在我的本地机器上工作)。
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我不确定为什么它在你的开发机器上工作,因为对我来说默认行为是你在我们的服务器上得到的。


您本地代码中的某些内容正在更改错误处理程序,因此 PHPUnit 的错误处理程序被覆盖。


基本上,PHPUnit 将 转换E_NOTICE为 a PHPUnit\Framework\Error\Notice,并且您断言您将获得一个\ErrorException. 由于错误处理程序更改,它仅适用于您的开发机器。


将您的代码更改为此对我有用:


use PHPUnit\Framework\Error\Notice;

use PHPUnit\Framework\TestCase;


class RandomTest extends TestCase

{


    public function testNoticeToException(): void

    {

        $this->expectException(Notice::class);

        trigger_error('Notice Issued');


    }

}

您也可以使用它,它是等效的:


$a = [1 => 'a', 2 => 'b', 3 => 'c'];

$this->expectNotice();

$b = $a[99];

你为什么在你的本地机器上得到一个ErrorException......我不确定。你需要寻找可以执行的东西set_error_handler()。


我注意到在你的配置中你正在加载lib/bootstrap.php,它不在默认的 Symfony 路径中。我会从那时起开始检查。


查看完整回答
反对 回复 2022-07-09
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信