【问题标题】:How can I mock outputting messages to the error log with PHPUnit?如何使用 PHPUnit 模拟将消息输出到错误日志?
【发布时间】:2015-01-07 18:48:11
【问题描述】:

this answer 中提到使用expectOutputString() 来,好吧,期待PHPUnit 中的输出字符串。我还需要做类似的事情,即告诉模拟输出一个字符串。我以前使用$mock->will($this->throwException(Exception('foo')) 让我的模拟抛出异常,但现在我需要它来记录错误而不是重新抛出异常,而不是抛出异常,这意味着我需要我的模拟输出一个字符串,就像@987654324 @ 在我试图模拟的方法中执行,以便我的测试可以预期字符串。

这有意义吗?有可能吗? PHPUnit 是否提供了一种方法来做到这一点?

【问题讨论】:

  • php_error()?你的意思是error_log()吗?
  • 是的,我愿意。这是漫长的一天。

标签: php mocking phpunit automated-tests error-logging


【解决方案1】:

从可测试性的角度来看,将错误记录抽象到一个类中总是更好。如果您直接致电error_log(),您将难以检查所拨打的电话。

如果您无法重构您的代码并使用一个类来记录错误,您可以尝试设置一个自定义错误处理程序,将消息存储在某个位置,然后在测试,在相关调用之后。

但如果可以,最好创建一个类,其中包含抽象原生 php 错误日志记录的方法。该类将成为被测类的依赖项。您可以将它作为构造函数强制参数传递,或者让类自动创建它,但允许在外部设置它。显然,在测试中你会注入一个带有期望的“ErrorLogger”类的模拟

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2013-10-29
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多