问题
I have a Zend Framework project, and want to using unit testing to test it.
In tests folder, I have the phpunit.xml
as following;
<phpunit bootstrap="./application/bootstrap.php" colors="true">
<testsuite name="Application Test Suite">
<directory>./</directory>
</testsuite>
<filter>
<whitelist>
<directory suffix=".php">../application/</directory>
<exclude>
<directory suffix=".phtml">../application/</directory>
<file>../application/Bootstrap.php</file>
<file>../application/controllers/ErrorController.php</file>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./log/reprot" charset="UTP-8"
yui="true" highlight = "true" lowUpoerBound="50" highLowerBound="80"/>
<log type="textdox" target="./log/testdox.html" />
</logging>
And I have bootstrap.php
in /tests/application folder as follows:
<?php
error_reporting(E_ALL | E_STRICT);
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
require_once 'Zend/Loader/Autoloader.php';
require_once 'controllers/ControllerTestCase.php';
Zend_Loader_Autoloader::getInstance();
when I go to the command line, run the following command
phpunit --configuration phpunit.xml
it throws the exception:
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Application Test Suite.php" nor "Application Test Suite.php" could be opened.' in D:\PHP\php5\PEAR\PHPUnit\Util\Skeleton\Test.php:102 Stack trace: #0 D:\PHP\php5\PEAR\PHPUnit\TextUI\Command.php(157): PHPUnit_Util_Skeleton_Test- >__construct('Application Tes...', '') #1 D:\PHP\php5\PEAR\PHPUnit\TextUI\Command.php(129): PHPUnit_TextUI_Command->run (Array, true) #2 D:\PHP\php5\phpunit(53): PHPUnit_TextUI_Command::main() #3 {main} thrown in D:\PHP\php5\PEAR\PHPUnit\Util\Skeleton\Test.php on line 102
How could I fix it?
回答1:
Youll notice its throwing the exception because its looking for a file named the same as the name
you provided for your test suite. You need to actually write a test suite and then supply the name of that test suite to your config: http://www.phpunit.de/manual/3.2/en/organizing-test-suites.html
回答2:
I was having the same problem with the same setup. From what I understand, more recent versions of PHPUnit require at least one actual test to run properly. After creating a simple test, it worked.
myProject/tests/application/DemoTest.php
<?php
class DemoTest extends ControllerTestCase
{
public function setUp() {
parent::setUp();
}
public function testCanDoUnitTest() {
$this->assertTrue(true);
}
}
回答3:
I noticed that you're not using the <testsuites>
which contains multiple occurences of <testsuite>
.
Here is my phpunit.xml which works fine for Zend Framework projects:
<testsuites>
<testsuite name="UnitTests">
<directory>./library</directory>
</testsuite>
<testsuite name="ApplicationTests">
<directory>./application</directory>
</testsuite>
</testsuites>
来源:https://stackoverflow.com/questions/5777877/phpunit-throws-uncaught-exception-phpunit-framework-exception