如何让phpunit在外部存储库上进行代码覆盖?

时间:2016-09-30 10:45:25

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

问题

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

原则上,这对你来说可能听起来很奇怪。为了防止“你不应该这样做”或“在同一个回购中进行测试”的答案,让我给出背景。

上下文

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

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

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

  4. 当我们没有那么纯粹的DDD时,我们拥有99%的人口,模型在同一个仓库中而不是应用程序,只是在一个单独的目录中,live很容易。这就是DDD“作为一种方法”,即使我们在任何捆绑之外都有模型,因为模型是完全独立的,而且真的应该生活在一个单独的回购中。

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

  6. ... SOOOO

    当您在同一个存储库/tests中有/srcmyNiceProject-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%包含业务逻辑的代码行”,然后......

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

    旁注

    这种模式的另一个例子是Q.A.需要对编码器已经测试过的内容进行双重测试的部门。他们“不”依赖自动包含的单元测试,并希望应用另一个独立的测试套件。

    另外,Q.A。不应写入主回购,不要污染编码人员的工作。

1 个答案:

答案 0 :(得分: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
  

的香味/ 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目录的覆盖。

也可以使用绝对路径。