6

我遵循在模块中存储测试的 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

4

2 回答 2

1

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

于 2013-04-07T10:11:43.333 回答
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 文件中。

只是一个想法 :)

于 2013-04-07T11:57:48.660 回答