Symfony2 PHPUnit,稍长测试,与Monolog有关的致命错误

时间:2012-09-14 18:15:37

标签: php symfony phpunit monolog

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

*总而言之,查询可能需要比平常多一点时间,或者标签位更多的资源让我在php fatal error * PHPUnit >

错误看起来像这样:

  
    

致命错误:在/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)。或者这个错误可能与访问$client = static::createClient();中的setUpBeforeClass()有关...然后再次访问前面的测试..无论如何......这让我感到困惑,据我所知,其他一切都在我的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);}

1 个答案:

答案 0 :(得分:1)

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

我不熟悉Monolog,但是在简短地看一下他们最新的GitHUb repo时,我可以看到它继承的LineFormatter或NormalizerFormatter类都没有这样的方法。

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