11

我在我的项目中使用 PHPUnit 3.5.12、netbean 6.9 和 git 子模块。

所以我的文件夹架构如下所示:

lib/
lib/submodule1
lib/submodule1/src
lib/submodule1/tests
lib/submodule2
lib/submodule2/src
lib/submodule2/tests
src/
tests/

考虑到我的主要测试文件夹(带有 phpunit_netbean.xml 和 bootstrap.php)位于 /tests/ 文件夹中;我怎样才能在 /lib/*/tests/ 中运行测试?

我看过测试套件,但我无法让它工作。到目前为止,我已经在我的 tests/phpunit_netbean.xml 文件中尝试了以下配置:

<?xml version="1.0"?>
<phpunit
    bootstrap="./bootstrap.php"
    strict="true"
    stopOnError="false"
    stopOnFailure="false"
    stopOnIncomplete="false"
    stopOnSkipped="false"
    colors="false"
    verbose="true"
    >

    <testsuites>
        <testsuite name="modules">
            <directory>../lib/*</directory>
        </testsuite>
    </testsuites>

</phpunit>

当我在 Netbean 中按 ALT+F6 时,我只有 /tests 运行的测试。同样的事情:

/tests$ phpunit -c phpunit_netbean.xml --testdox ./
enter code here

另外,我试过这个:

/tests$ phpunit -c phpunit_netbean.xml --testdox --loader modules ./
PHPUnit 3.5.12 by Sebastian Bergmann.

Could not use "modules" as loader.
4

2 回答 2

13

查看您的 PHPUnit 配置文件的附录。您可以告诉 PHPUnit 包含哪些文件夹:

<testsuites>
    <testsuite name="Submodules">
        <directory suffix="Test.php">../lib/*</directory>
    </testsuite>
</testsuites>

当你运行它时,PHPUnit 应该递归地遍历 lib 中的所有文件夹,并将所有以 Test.php 结尾的文件视为 UnitTests。测试套件的名称无关紧要。为了简化 XML 文件的创作,请考虑使用我的 phpunit-schema 文件

PHPUnit 手册章节:使用文件系统编写测试套件对此有一些附加信息。Netbeans 有一个输入对话框,您可以在其中指定 phpUnit.xml 和任何自定义 TestSuite 类的路径。

这是一个示例项目:https ://github.com/gooh/sample

C:\Users\Gordon\Desktop\demo\tests>phpunit --testdox
PHPUnit 3.5.13 by Sebastian Bergmann.

A
 [x] One

B
 [x] One

My
 [x] One
于 2011-03-31T13:31:03.233 回答
3

让我们创建一个测试用例:

mkdir project
mkdir project/tests
mkdir project/modules/
mkdir project/modules/a/
mkdir project/modules/a/tests/
mkdir project/modules/b/
mkdir project/modules/b/tests/

echo "<?php class MyTest extends PHPUnit_Framework_TestCase { public function testOne() { \$this->assertTrue(true); } } " > project/tests/MyTest.php
echo "<?php class MyTwoTest extends PHPUnit_Framework_TestCase { public function testOne() { \$this->assertTrue(true); } } " > project/modules/a/tests/MyTwoTest.php
echo "<?php class MyThreeTest extends PHPUnit_Framework_TestCase { public function testOne() { \$this->assertTrue(true); } } " > project/modules/b/tests/MyThreeTest.php


tree
.
`-- project
    |-- modules
    |   |-- a
    |   |   `-- tests
    |   |       `-- MyTwoTest.php
    |   `-- b
    |       `-- tests
    |           `-- MyThreeTest.php
    `-- tests
        `-- MyTest.php

如果您现在只是运行phpunit project,它将执行这些文件夹中的所有测试。所以不需要任何进一步的配置。

如果您的 /src/ 文件夹中有以 *Test.php 结尾的 lasses,唯一可能会咬到您的东西,如果您不这样做,据我所知,您不会有任何问题。

phpunit project/
PHPUnit 3.5.11 by Sebastian Bergmann.

...

Time: 0 seconds, Memory: 2.75Mb
于 2011-03-31T13:53:07.557 回答