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

我在本地机器上得到的结果与在 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 工作(但仍在我的本地机器上工作)。


天涯尽头无女友
浏览 88回答 1
1回答

眼眸繁星

我不确定为什么它在你的开发机器上工作,因为对我来说默认行为是你在我们的服务器上得到的。您本地代码中的某些内容正在更改错误处理程序,因此 PHPUnit 的错误处理程序被覆盖。基本上,PHPUnit 将 转换E_NOTICE为 a PHPUnit\Framework\Error\Notice,并且您断言您将获得一个\ErrorException. 由于错误处理程序更改,它仅适用于您的开发机器。将您的代码更改为此对我有用:use PHPUnit\Framework\Error\Notice;use PHPUnit\Framework\TestCase;class RandomTest extends TestCase{&nbsp; &nbsp; public function testNoticeToException(): void&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $this->expectException(Notice::class);&nbsp; &nbsp; &nbsp; &nbsp; trigger_error('Notice Issued');&nbsp; &nbsp; }}您也可以使用它,它是等效的:$a = [1 => 'a', 2 => 'b', 3 => 'c'];$this->expectNotice();$b = $a[99];你为什么在你的本地机器上得到一个ErrorException......我不确定。你需要寻找可以执行的东西set_error_handler()。我注意到在你的配置中你正在加载lib/bootstrap.php,它不在默认的 Symfony 路径中。我会从那时起开始检查。
打开App,查看更多内容
随时随地看视频慕课网APP