从我读过的内容来看,似乎我应该可以设置一个文件夹,例如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.
我希望其他人遇到这个问题并且这只是一个简单的修复,否则我只是做错了什么?
答案 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,或测试运动员找不到它们。