【问题标题】:Making PHPUnit ignore things?让 PHPUnit 忽略东西?
【发布时间】:2010-11-27 16:33:19
【问题描述】:

我有一个 PHPUnit 测试类,我希望在测试运行中忽略它。我知道我可以通过重命名它使其文件名中不包含单词 Test 来做到这一点,但我宁愿不这样做,因为它比我想要的更混淆了源代码控制水域。

有人有什么建议吗?

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    phpunit 命令有几个选项可以帮助定义应该和不应该运行哪些测试:

    $ phpunit --help
    PHPUnit 3.4.0beta5 by Sebastian Bergmann.
    
    Usage: phpunit [switches] UnitTest [UnitTest.php]
           phpunit [switches] <directory>
    ...
      --filter <pattern>       Filter which tests to run.
      --group ...              Only runs tests from the specified group(s).
      --exclude-group ...      Exclude tests from the specified group(s).
      --list-groups            List available test groups.
    ...
    

    那些可能不允许指定确切你想要什么......但他们可能会有所帮助。

    更多详情请见The Command-Line Test Runner


    特别是,我有点喜欢分组功能:只需在测试的 phpdoc 中使用 @group 标记,将它们重新分组(例如,每个“功能块”一组);然后,您可以在命令行上使用--group--exclude-group 选项来指定应该或不应该运行哪些测试。

    在你的情况下,如果你不能修改测试,也许 --filter 选项会有所帮助,这取决于你的测试是如何命名的(即,如果有一种方法可以识别你想要运行的那些):

    --filter
    仅运行名称与给定模式匹配的测试。图案可以是 单个测试的名称或 匹配的正则表达式 多个测试名称。


    如果您不总是更改要运行的测试“组”,另一种解决方案可能是使用仅包含您要运行的测试的测试套件。

    例如,看看Composing a Test Suite Using XML Configuration

    【讨论】:

    • Group 注释会做得很好。谢谢。
    • 我在所有慢速测试中都设置了@group slow,并使用phpunit.xml 文件默认排除它们。如果我想再次包含它们,我只需运行phpunit --no-configuration --group slow
    • @dave1010 你也可以使用phpunit --exclude-group __no-group__; __no-group__ 可以被任何不存在的随机组名替换,结果仍然相同。不要与 real 组混淆,__nogroup__!
    【解决方案2】:

    只需重命名您的方法:

    testFunctionality () { //废话 }

    ignore_testFunctionality () { //废话 }

    【讨论】:

      【解决方案3】:

      我意识到这是一个已被接受的老问题,所以我希望我没有打扰,但我只想指出,为了完成,skip tests 是可能的。 PHPUnit 不会执行不完整和跳过的测试。

      当然,这是在每个测试级别上的 - 但是,您可以通过将其放入课堂'setUp() 来巩固它。

      只是一个提示。

      【讨论】:

      • 请注意,仍然会为跳过的测试插入固定装置,这可能是运行测试的较慢部分之一
      【解决方案4】:

      我搜索了整个PHPUnit 手册,但没有找到任何东西。您可以出于测试覆盖的目的而忽略代码,但仅此而已。但是,这个ChangeLog(在一个明显的分叉中)提到它将“忽略以. 为前缀的测试文件名”我没有尝试过,但值得一试。或者你可以注释掉这个测试。我假设你想要 NUnit 提供的东西,它会报告被忽略的测试;我没有找到类似的东西。

      【讨论】:

      • 感谢您的研究,我已经完成了,但重命名文件并不是我喜欢做的事情。
      • 前缀为.的前缀是什么?一个点?
      • 是的,.。也修改损坏的链接。
      【解决方案5】:

      我更喜欢为我的函数使用普通名称并放入函数 docBloc

      /**
      * @test
      */
      public function getDetails()
      {}
      

      所以,当我不想运行此测试时,我只需删除该@test。 另外,也许你会在这里找到有用的东西PHPUnit - The XML Configuration File 我在“排除”标签测试中添加了我不想被 phpunit 覆盖的测试。

      【讨论】:

        猜你喜欢
        • 2013-11-21
        • 1970-01-01
        • 2013-08-14
        • 2016-05-22
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        相关资源
        最近更新 更多