【发布时间】:2017-02-08 22:09:36
【问题描述】:
问题
我想在一个 git 存储库中进行 PhpUnit 测试,并在另一个存储库中测试代码。 问:我可以进行代码覆盖吗?
原则上,这对您来说可能听起来很奇怪。为了防止回答“你不应该这样做”或“测试存在于同一个仓库中”,让我给出上下文。
上下文
通常 PhpUnit 用于运行单元测试。
-
如果我们严格遵守纯 DDD,基于 symfony 的 PHP 项目应该基于两个不同的存储库:
- 一个模型,纯 PHP 类,单元测试,完全不参考 symfonay;
- 另一个使用 symfony 的“应用程序”,并通过 composer 将模型带入供应商以供公共 PHP API 使用。
除了单元测试之外,我曾经使用 PhpUnit 作为测试运行程序来使用 Selenium 运行功能测试。
当我们没有做如此纯粹的 DDD 时,我们有 99% 的人口,模型在同一个 repo 中而不是应用程序,只是在一个单独的目录中,生活很容易。即使我们将模型放在任何捆绑包之外,这也是 DDD “作为一种方法”,因为模型是完全独立的,并且真正应该存在于单独的存储库中。
-
相反,功能测试不属于模型。如果应用程序是 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