【问题标题】:In PHPStorm, How to breakpoint in a method of a PHPUnit class?在 PHPStorm 中,如何在 PHPUnit 类的方法中设置断点?
【发布时间】:2023-03-11 18:59:02
【问题描述】:

在 PHPStorm 中,我想调试一个 PHPUnit 类。如果我在单元测试类(继承自 PHPUnit_Framework_TestCase 的类)的方法中设置断点,则每当我运行测试时,PHPStorm 都会执行测试,但不会在断点处停止,即使其他中存在断点它曾经停下来的地方。

这是 PHPStorm 中的错误吗?如何停止 PHPUnit_Framework_TestCase 的方法?

【问题讨论】:

  • 完全没有区别。也许您使用的是“运行”而不是“调试”?否则——请检查路径映射(以防使用符号链接或类似的东西)。
  • 这很奇怪。我肯定会使用调试。我倾向于路径问题:我不知道这些“引导文件”、“骨架生成器”和“phpunit-skelgen”是什么,也不明白它们之间的关系和什么它们适合吗?
  • 你可以在这里找到它是什么以及如何使用它:phpunit.de/manual/current/en/index.html
  • 我在使用 PHPStorm 8 时遇到了同样的问题
  • 仅供参考:我禁用了“侦听调试连接”按钮,它开始像往常一样在断点处停止。

标签: php debugging phpunit phpstorm


【解决方案1】:

为了使 PHPStorm 停止在测试中的断点处,您必须“调试”(Shift + F9)而不是“运行”(Shift + F10)您的配置。

【讨论】:

  • 正如我所说,我确实使用“调试”。它确实停止了,但仅限于不继承自 PHPUnit_Framework_TestCase 的类的方法中
【解决方案2】:

如果你的测试用例有@runInSeparateProcess 注释或者在phpuint.xml 配置文件中<phpunit processIsolation="true"> 标记有processIsolation 属性并且它的值为true,那么调试器将不会在断点处停止,因为它在一个单独的线程。

【讨论】:

    【解决方案3】:

    仔细检查您放置断点的文件实际上是正在执行的文件。您可能安装了多个版本的 PHPUnit。

    或者覆盖您自己的测试文件夹中的测试用例并从它扩展。创建一个具有相同名称和参数的函数,您希望在其中放置断点。然后只需将呼叫连接到父级:

    class My_TestCase extends PHPUnit_Framework_TestCase
    {
        public function funcToTest($param) {
            return parent::funcToTest($param);
        }
    }
    

    然后让您的测试从该测试用例类扩展,并将断点放在那里。当您点击它时,您可以更深入地了解实际使用了 phpunit 中的哪个具体文件以及它在磁盘上的位置。

    【讨论】:

      【解决方案4】:

      尝试查找您是否拥有安装了 Xdebug 的正确 PHP 解释器。我有类似的问题,没有断点的原因是在 PHPStorm 中配置了几个解释器,并且没有选择具有 Xdebug 的正确解释器。您可以通过编辑 PHPStorm Settings > Languages and Frameworks > PHP

      来更改解释器

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 2013-01-22
        • 1970-01-01
        相关资源
        最近更新 更多