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

2022-08-30 09:33:19

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

无论出于何种原因,在我的安装中(在OS X上),它认为文件夹test/是一个文件,或者看起来是这样:

$ 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

我希望通过PEAR在OS X Snow Leopard上按照这些说明 http://www.newmediacampaigns.com/page/install-pear-phpunit-xdebug-on-macosx-snow-leopard 安装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.

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


答案 1

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

你有一个充满.php文件的目录,在你的情况下,它们都包含测试用例。

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

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

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

如果您真的想更改该行为 ,可以在测试目录中创建一个名为phpunit.xml的文件,其中包含以下内容

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

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

但是,最好习惯约定并相应地命名测试。


答案 2

在文件夹上运行测试的更简单方法是在所有测试末尾添加“Test.php”,然后像这样运行phpunit指定文件夹

phpunit .

phpunit your_test_folder/.

推荐