如何更改PHPUnit错误消息以显示自定义错误

贾斯汀

我用自己的扩展了PHP Exception以添加其他数据:

class MyException extends Exception {
   public $foo = [];

   public function __construct($message = '', $data = null, $code = 0) {
       $this->foo = $data;

       paret::__construct($message, $code);
   }
}

在执行正常请求时,这些错误会正确记录,并且我不想向中添加任何其他内容$this->message


运行测试时,我可以抛出它:

if (!$this->save()) {
    throw new MyException('Internal Server Error', ['log' => 'missing data'], 500);
}

并且PHPUnit将输出:

MyException:内部服务器错误

我想要:

MyExeption:内部服务器错误;{“日志”:“缺少数据”}


如何扩展PHPUnit使其能够$myException->foo与错误消息一起显示?


样例代码:

<?php

class SampleTest extends CTestCase
{
    public function testIndex()
    {
        $this->assertTrue($this->save());
    }

    protected function save()
    {
        $model = new Orders();
        $model->addError('id', 'ID is Required');

        if (!$model->validate()) {
            throw new HttpApiModelException(500, 'Failed to save', $model);
        }

        return true;
    }
}

用命令执行 common/vendor/bin/phpunit --configuration tests/phpunit.xml --verbose tests/functional/SampleTest.php

并输出:

在此处输入图片说明

麦克

我不确定这是否是最佳选择,但是您可以实现测试结果打印机,例如:

<?php

namespace Tests;

use PHPUnit\TextUI\ResultPrinter;

class TestPrinter extends ResultPrinter
{
    protected function printDefect(\PHPUnit\Framework\TestFailure $defect, $count)
    {
        $this->printDefectHeader($defect, $count);

        $ex = $defect->thrownException();
        // you can do whatever you need here, 
        // like check exception type, etc,
        // printing just line number here
        $this->write('Line #' . $ex->getLine() . "\n");

        $this->printDefectTrace($defect);
    }
}

并注册为要使用的打印机(假定为xml配置,但也可以通过命令行完成):

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="vendor/autoload.php"
         printerClass="Tests\TestPrinter"
>
    <!-- note printerClass attribute above -->
</phpunit>

这样做,您将获得与以下内容类似的输出:

There was 1 error:

1) Tests\SomeTest::testStuff
Line #16
LogicException: whatever

(我只是做了一个简单的测试throw new \LogicException('whatever');

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Yii中自定义错误显示消息?

如何在DropzoneJS中显示自定义错误消息?

角度2:FormGroup:如何显示自定义错误消息

如何显示API请求的自定义验证错误消息?

如何显示自定义验证错误消息

如何使用Thymeleaf显示自定义错误消息?

显示自定义错误消息

PhpUnit:测试方法调用时的自定义错误消息

如何自定义Devise错误消息?

如何自定义 PHPMailer 错误消息

如何使用自定义错误消息抛出错误?

Joi 验证显示自定义错误消息

在Azure Powershell中显示自定义错误消息并退出

JQuery 验证自定义错误消息未显示

自定义错误验证消息未显示

以wp忍者形式显示自定义错误消息

如何在角度4中显示来自自定义验证器功能的自定义错误消息?

如何在自定义验证中更改默认的“ is_invalid错误”消息

如何在扩展(自定义)验证器类中动态更改验证错误消息

如何将HTML验证的默认文本更改为自定义错误消息

如何在Primeng下拉菜单中更改自定义错误消息

Node.js + Joi如何显示自定义错误消息?

如何在JSP中显示Spring Security Auth异常的自定义错误消息

如何在javascript客户端中显示自定义REST API错误消息

OctoberCMS:违反唯一约束时如何显示自定义错误消息?

如何使用护照和快递显示自定义错误消息

如何通过 ajax 请求以模式显示任何自定义错误消息 Ruby on Rails

如何在Netsuite中使用SuiteScript 2.0显示无堆栈跟踪的自定义错误消息

如何使用jquery验证插件显示自定义验证错误消息?