【问题标题】:How can I make phpunit do code-coverage on an external repository?如何让 phpunit 在外部存储库上进行代码覆盖?
【发布时间】:2017-02-08 22:09:36
【问题描述】:

问题

我想在一个 git 存储库中进行 PhpUnit 测试,并在另一个存储库中测试代码。 问:我可以进行代码覆盖吗?

原则上,这对您来说可能听起来很奇怪。为了防止回答“你不应该这样做”或“测试存在于同一个仓库中”,让我给出上下文。

上下文

  1. 通常 PhpUnit 用于运行单元测试。

  2. 如果我们严格遵守纯 DDD,基于 symfony 的 PHP 项目应该基于两个不同的存储库:

    • 一个模型,纯 PHP 类,单元测试,完全不参考 symfonay;
    • 另一个使用 symfony 的“应用程序”,并通过 composer 将模型带入供应商以供公共 PHP API 使用。
  3. 除了单元测试之外,我曾经使用 PhpUnit 作为测试运行程序来使用 Selenium 运行功能测试。

  4. 当我们没有做如此纯粹的 DDD 时,我们有 99% 的人口,模型在同一个 repo 中而不是应用程序,只是在一个单独的目录中,生活很容易。即使我们将模型放在任何捆绑包之外,这也是 DDD “作为一种方法”,因为模型是完全独立的,并且真正应该存在于单独的存储库中。

  5. 相反,功能测试不属于模型。如果应用程序是 Web 应用程序,则功能测试可能是 selenium;如果应用程序是 REST-API,则功能测试可能是某种 JSON 解析器;如果应用程序是命令行接口,则可能是命令测试器。

    李>

太好了……

/tests/src 在同一个存储库myNiceProject-ModelAndApplication.git 中时,很容易拥有像这样的conig 文件。

<phpunit bootstrap="vendor/autoload.php" colors="true">
    <testsuites>
        <testsuite name="myNiceProject-ModelAndApplication">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
        </whitelist>
    </filter>
</phpunit>

相反,当您在存储库 myNiceProject-Application.git 和存储库 myNiceProject-Model.git 中进行功能测试时,您想要“监控”应用程序的功能测试执行了多少百分比的模型,因为业务规则说“功能测试要保证覆盖90%的包含业务逻辑的代码行”,那么……

问:如何在测试所在的存储库 A 中设置配置,以对存储库 B 中的代码进行测试覆盖?

旁注

这种模式的另一种情况是问答。需要对编码人员已经测试过的内容进行双重测试的部门。他们“不”依赖于自动包含的单元测试,而是希望应用另一个独立的测试套件。

此外,Q.A.不应该写到主仓库,以免污染编码器的工作。

【问题讨论】:

    标签: selenium phpunit repository domain-driven-design code-coverage


    【解决方案1】:

    将您想要覆盖的目录列入白名单。

    fizz/
    ├── composer.json
    ├── phpunit.xml.dist
    ├── src
    │   └── Fizz.php
    └── test
        └── FizzTest.php
    buzz/
    ├── composer.json
    ├── phpunit.xml.dist
    ├── src
    │   └── Buzz.php
    └── test
        └── BuzzTest.php
    

    fizz/phpunit.xml.dist

    <?xml version="1.0" encoding="UTF-8"?>
    <phpunit>
        <testsuites>
            <testsuite name="unit">
                <directory>test</directory>
            </testsuite>
        </testsuites>
    
        <filter>
            <whitelist processUncoveredFilesFromWhitelist="true">
                <directory>src</directory>
                <directory>./../buzz/src</directory>
            </whitelist>
        </filter>
    
        <logging>
            <log type="coverage-html" target="build/coverage" />
        </logging>
    
    </phpunit>
    

    以上配置包括buzz项目src目录的覆盖。

    也可以使用绝对路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-15
      • 2012-05-04
      • 1970-01-01
      • 2013-05-07
      • 2012-01-23
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多