如何将ZF2单元/应用程序模块测试整合到一个呼叫中?

时间:2013-04-07 09:06:38

标签: php unit-testing phpunit zend-framework2

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

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

所以我的问题是:是否有一种方法可以让根级phpunit.xml文件从模块中读取单独的phpunit.xml和bootstrap文件,如果你愿意,还有一种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

2 个答案:

答案 0 :(得分:1)

之前在各种人群中讨论过这个问题我很确定你不能,你需要编写一个脚本来循环遍历模块并逐个模块地运行它们。

答案 1 :(得分: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文件中。

只是一个想法:)