PHPUnit TestListener在PhpStorm中不起作用

时间:2013-02-11 12:46:26

标签: symfony phpunit phpstorm

我正在使用Symfony 2,PHPUnit 3.7.10和PhpStorm 5.0.4

我在namespace Acme\DemoBundle\Tests

中有一个 MyTestListener 类(实现 PHPUnit_Framework_TestListener

当我使用vendor/bin/phpunit.bat -c app/从CLI调用phpunit时 听众工作,测试成功。

我发现了这个:PHPUnit, PHPUnit_Framework_TestListener, Netbeans and the PHPUnit xml config但似乎是另一个问题。

但是当我在PhpStorm中开始测试时,监听器没有加载,一些对象应该被注入抽象测试类,在这种情况下为空。我还注意到,当我在MyTestListener类中使用断点进行调试时,调试器不会在此类中停止,其他断点也能正常工作。

phpunit.xml条目:

    <listeners>
       <listener class="Acme\DemoBundle\Tests\MyTestListener" file="../src/Acme/DemoBundle/Tests/MyTestListener.php">
       </listener>
    </listeners>

我也尝试添加一个空元素,它没有帮助。

在我的PhpStorm的运行/调试配置中,我指定了 phpunit.xml bootstrap 文件。 我还为命令行/解释器添加了此选项:-d auto_prepend_file=vendor/autoload.php

phpunit.xml中的监听器配置似乎已被解析,但无法正常工作。当我将类名更改为无效的文件/类时,我收到一个错误,该文件无法打开流。我也尝试使用绝对文件路径或将斜杠更改为反斜杠,没有任何作用。

1 个答案:

答案 0 :(得分:0)

真可惜......我发现了自己的错误

我从CLI进行所有测试,但在PhpStorm中只有一个测试类,所以套件名称不同,在我的监听器类中,只有当套件名称匹配时才会执行这些操作:

if ($suite->getName() == "db-tests") {...}

所以解决方案是将表达式扩展到

$name = $suite->getName();
if ($name == "db-tests" || 
   strpos($name, 'Acme\DemoBundle\Tests\Database') !== false) {...}