Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why does PHPUnit try to find a file with the name of the testsuite?

I have this in my phpunit.xml file:

<phpunit ...>
    <testsuites>
        <testsuite name="MyTests">
            <directory>../path/to/some/tests</directory>
        </testsuite>
    </testsuites>
    ... // more settings for <filter> and <logging>
</phpunit>

And when I go to run it, I get this error:

PHP fatal error: Uncaught exception 'PHPUnit_Framework_Exception'
with message 'Neither "MyTests.php" nor "MyTests.php" could be opened.'

Why does PHPUnit give me this error, and why is it looking for "MyTests.php" if I gave it a directory in which to look for tests?

And on a related note, when I add more <testsuite> entries with other tests, PHPUnit runs without error. What's up with that?

like image 979
jches Avatar asked Aug 12 '11 20:08

jches


2 Answers

By default PHPUnit will add "all *Test classes that are found in *Test.php files" (see PHPUnit docs). If it doesn't find any files matching that description, (e.g. a SomeTest.php file defining a SomeTest class), it falls back to looking for a file based on the name attribute of the test suite.

The solution is to create a file matching that description so that PHPUnit doesn't fall back to its default of searching by the testsuite name:

<?php
// in ../path/to/some/tests/SomeTest.php:
class SomeTest extends PHPUnit_Framework_TestCase {
    public function test() {
        //... test cases here
    }
}
?>

Now you should be able to run phpunit without errors:

$ phpunit
PHPUnit 3.5.14 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 10.75Mb

OK (1 test, 0 assertions)

It will work without errors when you add more testsuite entries if PHPUnit is able to find matching test cases to run under those other suites. If it finds tests to run in any testsuite, it won't resort to searching by the name attribute for the suites it couldn't find anything for.

like image 162
jches Avatar answered Oct 11 '22 00:10

jches


I believe the problem is that you're not telling it which files contain the test cases and/or suites you want to run. Try adding the suffix="Test.php" attribute.

<testsuite name="MyTests">
    <directory suffix="Test.php">../path/to/some/tests</directory>
</testsuite>
like image 41
David Harkness Avatar answered Oct 10 '22 22:10

David Harkness