【问题标题】:Symfony2 PHPUnit, slightly long test, fatal error related to MonologSymfony2 PHPUnit,测试稍长,Monolog相关的致命错误
【发布时间】:2012-09-14 18:15:37
【问题描述】:

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

*总而言之,一个查询可能比平时多花一秒钟时间或一个选项卡位更多的资源让我在PHPUnit 中获得php fatal error *

错误看起来像这样:

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

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

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

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

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

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

* Stopwatch.php 的第 92 行 .. github source file here *

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

【问题讨论】:

  • 你能显示 Stopwatch.php 的第 92 行和之前的几行吗?
  • 我在主要部分添加了第 92 行,并带有指向 github 上 Stopwatch.php 源的链接。看起来它试图表现得像秒表......致命错误是个大问题.似乎一路上没有加载某些东西,因此出错了。但是为什么修改一个非常简单的查询会影响正在加载的内容?

标签: php symfony phpunit monolog


【解决方案1】:

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

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

Monolog 似乎与 Symfony 不兼容。如果不修改 Monolog 和/或 Symfony Stopwatch 类,您将无法使用 Stopwatch 来分析与 Monolog 相关的代码。

【讨论】:

  • 编辑文件会使事情变得复杂。我可以在 processIsolation 设置为“真”的情况下运行 phpunit 测试。你能解释一下这个问题吗?
  • 在不了解您正在运行的整个单元测试套件的情况下,很难说为什么进程隔离会导致不同的结果。也许您有一个测试项目在测试拆解中没有被清除,因此污染了在同一进程中运行的后续测试。
  • 迈克,这仍然很难说,我已经花了很长时间解决这个问题.. 有时,隔离单行,大量调试。我的直觉是你涵盖了这个问题发生的两个主要原因.. #1 - 一些东西在此过程中被污染了。 #2 - Monolog/Phpunit/Symfony 玩得不好。
猜你喜欢
  • 1970-01-01
  • 2014-04-17
  • 2015-06-08
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
相关资源
最近更新 更多