如何将 ZF2 单元/应用程序模块测试合并到单个调用中?

Posted

技术标签:

【中文标题】如何将 ZF2 单元/应用程序模块测试合并到单个调用中?【英文标题】:How to consolidate ZF2 unit/application module tests into a single call? 【发布时间】:2013-03-29 10:46:28 【问题描述】:

我遵循 ZF2 将测试存储在模块中的约定,当从每个模块中运行测试时,一切正常。我想做的是有一个根级别的 phpunit.xml,它调用各个模块测试并将它们合并以生成代码覆盖率数据和其他指标。

问题是每个单独的测试套件都是在模块化 phpunit.xml 文件中引导的。我知道做事的唯一方法是在每个 phpunit.xml 文件中配置引导程序,当从根运行测试时显然不会被拾取,因为单个 xml 文件被忽略。

所以我的问题是:有没有办法让根级 phpunit.xml 文件从模块中读取单个 phpunit.xml 和引导文件,如果你愿意的话,是一种 phpunit 配置继承?我可以在 Phing 或 CI 脚本中编写此程序,但我希望它在开发过程中快速而肮脏地完成,并且此解决方案仍然不会生成合并的代码报告。

基本上,我想要这样的东西,但不是运行测试,而是希望它在每个模块中运行单独的 phpunit.xml 文件。这可能吗?

<?xml version="1.0" encoding="UTF-8"?>

<phpunit>
    <testsuites>
        <testsuite name="Site Tests">
            <directory>./module/Application/test/ApplicationTest</directory>
            <directory>./module/User/test/UserTest</directory>
        </testsuite>
    </testsuites>
</phpunit>

更新

目的是让 PHPUnit 生成的代码指标提供项目概述,而不是特定于模块化的概述。我很欣赏答案中的脚本将在每个模块的基础上运行单元测试,但这不是我想要的。我知道就 PHPUnit 而言,这可能是一个限制。在接下来的几天里,我将对此进行研究并尝试找到一个解决方案,因为它似乎在许多处理自定义模块的项目中很有用。

更新 2

Robert Basic 提出了一个脚本,该脚本创建了一个包含模块报告的目录结构,它工作得很好,但如果让它在 PHPUnit 中运行并提供适当的指标报告,那就太好了。

https://gist.github.com/robertbasic/5329789

【问题讨论】:

前段时间我问过similar question,但运气不佳。从那以后我就再也没有看过它,但我想我要做的是使用 Phing 来做这件事。如果您的 IDE 不支持它(例如 PhpStorm 支持),那么在您创建 test 目标后,它就像在命令行中运行 phing test 或类似命令一样简单。这不是您要寻找的,但这是一个简单的解决方法,我可能会自己使用。 如果您想使用 ant,那么可以在 [这里][1] 找到另一个解决方案。 [1]:***.com/questions/16628427/… 【参考方案1】:

如果您使用的是 Linux,您可以创建一个简单的脚本。不完全是您想要的解决方案,但仍然可以提供帮助:

#!/bin/sh

modDir=$(pwd)
for i in *; do

    if [[ -d $i/test ]]; then
        cd $i/test
        phpunit
        cd $modDir
    fi
done

您可以将其放入模块目录中的 runtests.sh 文件中。

只是一个想法:)

【讨论】:

感谢您的回答,但这无助于代码覆盖等问题,因为它会为每个测试套件生成单独的文件。【参考方案2】:

之前已经在 irc 上与不同的人讨论过这个问题,我敢肯定你不能,你需要编写一个脚本来循环遍历模块并逐个模块地运行它们。

【讨论】:

感谢您的回答,但请参阅上面的评论,了解我为什么要为整个项目生成代码覆盖率和指标。 我明白你的意思,但我认为不可能,我在工作中遇到了同样的问题,我们为每个模块 atm 生成代码覆盖率 这看起来像是 PHPUnit 中的一个限制。在接下来的几天里,我将更详细地研究它。为反馈干杯。 由于 PHPCS 或您用来进行代码分析的任何东西都只是读取 xml,您不能合并 xml 输出吗? 很可能,我还没有深入研究它。明天我将进行 hack 并发布结果。

以上是关于如何将 ZF2 单元/应用程序模块测试合并到单个调用中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ZfcUser 的控制器的简单 ZF2 单元测试

ZF2 Skeleton 和 Doctrine ORM xml 模式合并

软件测试--模块测试(单元测试)

使用单个命令从多模块项目运行所有 UI/单元测试

如何从 ZF2 中子实体的字段集中调用单个表单元素

excel中将两个单元格的内容合并