2

我已将我的问题缩小到一个涉及非常干净的 dbal 查询的单元测试。该查询涉及一个嵌套集,当我从 3 到 4 级分层类别时发生故障。执行时间方面的变化非常小。我正在使用的功能在 10 级时没有问题。但是,在 PhpUnit 中,当我运行 4 个或更多级别的测试时——我遇到了一个致命错误。

*总而言之,一个可能比平时多花一秒时间的查询或一个标签位更多的资源让我php fatal error进入PHPUnit*

错误如下所示:

致命错误:在第 92 行的 /var/www/my-app/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Debug/Stopwatch.php 中调用未定义的方法 Monolog\Formatter\LineFormatter::stopEvent()

这里有人在第 92 行也遇到了 phpUnit 致命错误问题。会不会有关系??

我已经列出了一些古怪的方法(如下)来绕过我的问题,但我仍然想知道为什么这样一个基本测试似乎会导致这个问题。

  • 运行 PhpUnit 并将其processIsolation设置为“true”。
  • 不要static::createClient();在 setUpBeforeClass() 方法中访问

我有一个受人尊敬的#symfony (Stof) 成员建议我似乎不正确地将@logger 投入服务.. 但我已经确认这似乎不是通过使用记录器服务我的任何服务。

也许这个问题与超时有关?(错误提到stopeventstopwatch)。或者这个错误可能与访问$client = static::createClient();有关setUpBeforeClass()..然后在前面的测试中再次访问..无论如何..这让我感到困惑,据我所知,我的 Symfony2 (2.1.1) 安装中的其他所有东西都在工作完全没问题。

* Stopwatch.php 的第 92 行 .. github 源文件在这里*

 /**
 * Stops an event.
 * @param string $name The event name
 * @return StopwatchEvent A StopwatchEvent instance
 */
public function stop($name)
{ return end($this->activeSections)->stopEvent($name);}
4

1 回答 1

1

好的。因此,您从数组中获取最后一项,$this->activeSections然后他们尝试在stopEvent()其上运行该方法。在这种情况下,LineFormatter该类似乎没有可用的方法。

我对 Monolog 不熟悉,但简要浏览一下他们最新的 GitHUb 存储库,我可以看到它继承的 LineFormatter 或 NormalizerFormatter 类都没有这样的方法。

看来 Monolog 与 Symfony 的关系并不好。如果不修改 Monolog 和/或 Symfony Stopwatch 类,您将无法使用 Stopwatch 来分析与 Monolog 相关的代码。

于 2012-09-14T19:45:05.037 回答