我如何 运行 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_TestSuite
(CakeTestSuite
似乎用于此)来组织测试套件
- 如果您同时使用
CakeTestSuite
组织测试和 PHPUnit XML 的 <testsuites>
/ <testsuite>
元素,您可能会 运行 遇到问题配置文件
对于 CakePHP 2.x,请按照文档进行操作 - 有一个内置的 shell 可以为您进行测试,因为 CakePHP 2.x 与 PHPUnit4.0 不兼容,您需要通过此 shell 坚持使用 3.7,而不是尝试手动调用测试。
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
我想 运行 一个带有 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_TestSuite
(CakeTestSuite
似乎用于此)来组织测试套件 - 如果您同时使用
CakeTestSuite
组织测试和 PHPUnit XML 的<testsuites>
/<testsuite>
元素,您可能会 运行 遇到问题配置文件
对于 CakePHP 2.x,请按照文档进行操作 - 有一个内置的 shell 可以为您进行测试,因为 CakePHP 2.x 与 PHPUnit4.0 不兼容,您需要通过此 shell 坚持使用 3.7,而不是尝试手动调用测试。
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