如何让phpunit从文件夹中的所有文件运行测试?

时间:2010-10-28 21:13:09

标签: php phpunit pear

从我读过的内容来看,似乎我应该可以设置一个文件夹,例如tests /,在单元测试类中放入一些文件,然后在该文件上运行phpunit,让它找到并运行测试。

无论出于何种原因,在我的安装中(在OS X上),它认为文件夹tests /是一个文件,或者它似乎是:

$ ls tests
test1.php test2.php
$ phpunit tests/test1.php
PHPUnit 3.5.3 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) FailingTest::testFail
Your test successfully failed!

/Users/****/tmp/tests/test1.php:4

FAILURES!
Tests: 1, Assertions: 0, Failures: 1.
$ phpunit tests/test2.php
PHPUnit 3.5.3 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.00Mb

OK (1 test, 1 assertion)
$ phpunit tests
PHP Fatal error:  Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '')
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '')
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102

我希望在OS X Snow Leopard上按照这些说明http://www.newmediacampaigns.com/page/install-pear-phpunit-xdebug-on-macosx-snow-leopard通过PEAR进行相当标准的phpunit安装。

$ pear version
PEAR Version: 1.9.1
PHP Version: 5.3.2
Zend Engine Version: 2.3.0
Running on: **** 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386
$ phpunit --version
PHPUnit 3.5.3 by Sebastian Bergmann.

我希望其他人遇到这个问题并且这只是一个简单的修复,否则我只是做错了什么?

3 个答案:

答案 0 :(得分:64)

这不是一个错误,它是一个功能。

您的目录中包含.php文件,在您的情况下,它们都包含测试用例。

但随着您的测试套件的增长,您可能希望在测试目录中包含其他php文件,不包含测试的文件,仅用于支持测试。这些文件永远不应该由PHPUnit本身执行。

这是一种非常常见的情况。

那么PHPUnit将如何知道它需要运行哪些文件以及哪些文件不运行? 检查文件名后缀是一个选项 - 默认情况下,PHPUnit将名称以Test.php结尾的所有内容视为测试并忽略其他所有内容

如果您真的想要,可以更改该行为 - 在test目录中使用以下内容创建名为phpunit.xml的文件

<?xml version="1.0" encoding="utf-8" ?>
<phpunit>
<testsuite name='Name your suite'>
    <directory suffix='.php'>./</directory>
</testsuite>
</phpunit>

完成后,PHPUnit将运行文件名末尾带有“.php”的所有文件 (在此上下文中,文件扩展名被视为文件名的一部分)

但是最好习惯惯例并相应地命名你的测试。

答案 1 :(得分:24)

在文件夹上运行测试的简单方法是在所有测试结束时添加“Test.php”并运行phpunit指定你的文件夹

phpunit .

phpunit your_test_folder/.

答案 2 :(得分:23)

恼人的小怪癖,但我想通了。

至少在默认配置下,测试文件必须以“Test.php”结尾,例如。 fooTest.php,或测试运动员找不到它们。