【问题标题】:How can I run PHPUnit with CakePHP tests with phpunit.xml?如何使用 phpunit.xml 运行带有 CakePHP 测试的 PHPUnit?
【发布时间】:2015-04-02 10:08:05
【问题描述】:

我想用 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!

此外,当我使用“控制台/蛋糕”命令时,它看起来还不错。

$ 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 命令运行测试?

谢谢!

【问题讨论】:

    标签: cakephp phpunit


    【解决方案1】:

    &lt;directory suffix="Test.php"&gt;Test/Case/&lt;/directory&gt; 指定的路径相对于phpunit.xml 文件的位置。

    另请注意:

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

    【讨论】:

      【解决方案2】:

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

      命令as documented

      cake test [...]
      

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

      Console/cake test app
      

      然后它将向您显示可用测试的列表。

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          【解决方案4】:

          这适用于 Cake 2,假设您在应用的 Config 目录中有一个 phpunit.xml 文件:

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

          【讨论】:

            猜你喜欢
            • 2014-02-04
            • 2014-11-03
            • 2015-08-28
            • 2020-04-28
            • 2010-11-27
            • 2017-08-14
            • 2014-12-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多