我如何 运行 PHPUnit with CakePHP 测试 phpunit.xml?

How can I run PHPUnit with CakePHP tests with phpunit.xml?

我想 运行 一个带有 phpunit 命令的 AllModelTest。
但是当我尝试 运行 时,结果没有什么可测试的。
当然还有很多测试代码。

$vendors/bin/phpunit --configuration app/Test/phpunit.xml
PHPUnit 3.7.38 by Sebastian Bergmann.

Configuration read from /Develop/web/app/Test/phpunit.xml




Time: 30 ms, Memory: 3.75Mb


No tests executed!

另外,当我使用 "Console/cake" 命令时,它看起来很好。

$ app/Console/cake test app AllModel --stderr

Welcome to CakePHP v2.5.8 Console
---------------------------------------------------------------
App : app
Path: /Develop/web/app/
---------------------------------------------------------------
CakePHP Test Shell
---------------------------------------------------------------
PHPUnit 3.7.38 by Sebastian Bergmann.

...
/app/Test/Case/Model/JanTest.php

我是这样写的phpunit.xml

<?xml version="1.0" encoding="utf-8" ?>
<phpunit bootstrap="phpunit-bootstrap.php"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    stopOnFailure="false">

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory suffix="Test.php">Test/Case/</directory>
        </testsuite>
    </testsuites>

</phpunit>

而phpunit-bootstrap.php是这样的

<?php

$file = __DIR__.'/../../vendors/autoload.php';
if (!file_exists($file)) {
    throw new RuntimeException('Install dependencies to run test suite.');
}
$autoload = require_once $file;

而目标测试文件"AllModelTest.php"是这样的

<?php

class AllModelTest extends CakeTestSuite {
    public static function suite() {
        $suite = new CakeTestSuite('All model tests');
        $suite->addTestDirectory(TESTS . 'Case/Model');
        return $suite;
    }
}

我应该如何处理 运行 来自 phpunit 命令的测试?

谢谢!

<directory suffix="Test.php">Test/Case/</directory>指定的路径是相对于phpunit.xml文件的位置。

另请注意:

  • PHPUnit 3.7 不再由 PHPUnit 项目主动维护
  • 多年来 PHPUnit 项目不鼓励通过子类化 PHPUnit_Framework_TestSuiteCakeTestSuite 似乎用于此)来组织测试套件
  • 如果您同时使用 CakeTestSuite 组织测试和 PHPUnit XML 的 <testsuites> / <testsuite> 元素,您可能会 运行 遇到问题配置文件

对于 CakePHP 2.x,请按照文档进行操作 - 有一个内置的 shell 可以为您进行测试,因为 CakePHP 2.x 与 PHPUnit4.0 不兼容,您需要通过此 shell 坚持使用 3.7,而不是尝试手动调用测试。

命令as documented

cake test [...]

所以从你的应用程序目录,测试应用程序测试:

Console/cake test app

然后它会显示可用测试的列表。

我遇到过这个问题,有时 phpunit.xml 提供的灵活性很有用并且是一个有效的用例。在我的情况和原始问题中,我们需要添加一些简单的 bootstrap 代码。

经过大量修改后,我发现如果 PHPUnit 是 cake 设计的 运行 来自 phar 文件,它也会自动从您所在的目录中查找 phpunit.xml 文件运行 测试。

对于命令行,这是 app 文件夹。所以文件应该位于 app/phpunit.xml.

对于网络测试运行程序,这是 app/webroot 文件夹。所以文件应该位于 app/webroot/phpunit.xml.

假设您在应用的 Config 目录中有一个 phpunit.xml 文件,这在 Cake 2 上运行良好:

Console/cake test app AllModel --configuration=Config/phpunit.xml