【问题标题】:Extending phpunit error message扩展 phpunit 错误消息
【发布时间】:2015-10-23 18:06:20
【问题描述】:

我想将日志输出添加到所有测试消息中。

$this->assertTrue(FALSE, "This assertion is False.". myLog::GetErrors());

我尝试使用附加的消息扩展 PHPUnit_Framework_TestCase::assertThat 函数,但它似乎对它没有影响。我知道扩展的 PHPUnit_Framework_TestCase 可以工作,因为我在那里还有几个用于测试的辅助函数(随机字符串生成)。

还有其他想法吗?会不会是客户倾听者?

【问题讨论】:

    标签: phpunit


    【解决方案1】:

    所有断言都是来自PHPUnit_Framework_Assert 的静态方法,不能被TestCase 的子类覆盖。但是,您可以定义自己的断言,使用修改后的消息调用原始断言。

    public static function assertTrue($value, $message='') {
        PHPUnit_Framework_Assert::assertTrue($value, $message . myLog::GetErrors());
    }
    

    所有失败的测试都调用onNotSuccessfulTest(),例外情况是唯一的参数。您可以覆盖此方法,并在某些情况下将您的日志错误添加到异常消息中。除了包含在异常中的错误消息之外,一些 PHPUnit 异常还提供了第二个描述。

    public function onNotSuccessfulTest(Exception $e) {
        if ($e instanceof PHPUnit_Framework_ExpectationFailedException) {
            $e->setCustomMessage(implode(PHP_EOL, 
                    array($e->getCustomMessage(), myLog::GetErrors())));
        }
        parent::onNotSuccessfulTest($e);
    }
    

    更新:正如 Gregory Lo 在下面的评论中指出的那样,setCustomMessage()getCustomMessage() 在 PHPUnit 3.6 中被删除。 :(

    【讨论】:

    • 谢谢。我决定接受你的第二个建议,因为我不想重写每个断言。
    • 你从哪里得到这些 getCustomMessage 和 setCustomMessage 方法? PHPUnit_Framework_ExpectationFailedException 中没有这样的方法
    • @GregoryLo 遗憾的是,它们在 3.6 版本中被无缘无故删除了。
    • 有时间我会创建一个拉取请求,将它们添加到基本的 PHPUnit 异常中。
    【解决方案2】:

    在最近的 PHPUnit 版本中不再需要了。 当您在 $this->assertXXXX() 中指定错误参数时,它会出现在 PHPUnit 的原始消息之前。

    截图:

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多