如何使用 PHPUnit 模拟将消息输出到错误日志?

How can I mock outputting messages to the error log with PHPUnit?

this answer 中它提到使用 expectOutputString() 来期望 PHPUnit 中的输出字符串。

我还需要做一些与此相对应的事情,即告诉 mock 输出一个字符串。

我之前使用 $mock->will($this->throwException(Exception('foo')) 让我的 mock 抛出异常,但现在我需要它来记录错误而不是抛出异常,而不是重新抛出异常,这意味着我需要我的 mock输出一个字符串,就像 error_log() 在我试图模拟的方法中所做的那样,以便我的测试可以期待该字符串。

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

从可测试性的角度来看,将错误记录抽象为 class 总是更好。如果您直接调用 error_log(),您将难以检查调用。

如果您不能重构您的代码并使用 class 记录错误,您可以尝试设置一个自定义错误处理程序,将消息存储在一些放置,然后在测试时检查那些消息,相关调用之后。

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