Why, Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...?

PhpFatal ErrorClassnotfoundexception

Php Problem Overview


Why I'm getting this PHP error?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...

Php Solutions


Solution 1 - Php

For those arriving here after updating phpunit to version 6 or greater released on 2017-02-03 (e.g. with composer), you may be getting this error because phpunit code is now namespaced (check changelog).

You will need to refactor things like \PHPUnit_Framework_TestCase to \PHPUnit\Framework\TestCase

Solution 2 - Php

The PHPUnit documentation says used to say to include/require PHPUnit/Framework.php, as follows:

require_once ('PHPUnit/Framework/TestCase.php');

UPDATE

As of PHPUnit 3.5, there is a built-in autoloader class that will handle this for you:

require_once 'PHPUnit/Autoload.php';

Thanks to Phoenix for pointing this out!

Solution 3 - Php

For higher version of phpunit such as 6.4 You must use the namespace PHPUnit\Framework\TestCase

use TestCase instead PHPUnit_Framework_TestCase

// use the following namespace
use PHPUnit\Framework\TestCase;

// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
    
}

Solution 4 - Php

I was running PHPUnit tests on PHP5, and then, I needed to support PHP7 as well. This is what I did:

In composer.json:

"phpunit/phpunit": "~4.8|~5.7"

In my PHPUnit bootstrap file (in my case, /tests/bootstrap.php):

// PHPUnit 6 introduced a breaking change that
// removed PHPUnit_Framework_TestCase as a base class,
// and replaced it with \PHPUnit\Framework\TestCase
if (!class_exists('\PHPUnit_Framework_TestCase') && class_exists('\PHPUnit\Framework\TestCase'))
    class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase');

In other words, this will work for tests written originally for PHPUnit 4 or 5, but then needed to work on PHPUnit 6 as well.

Solution 5 - Php

You may get this error because you namespaced the file. If so you will need to specify that PHPUnit_Framework_TestCase is in the global namespace by preceding it with a backslash:

namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}

I submitted a crude PR to start conversation for correcting the documentation.

Solution 6 - Php

You can simply install PHPUnit to run commands (https://github.com/sebastianbergmann/phpunit/#php-archive-phar):

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit

Run single test

And then run PHPunit test:

phpunit test.php

Content of test file is following:

<?php

class StackTest extends PHPUnit_Framework_TestCase
{
	protected function setUp()
	{
	}

	public function testSave()
	{

	}
}

Run test suite

Configuration of test suite: demosuite.xml. demo is directory containing all tests. Test files must be named as *_test.php (suffix).

<testsuites>
    <testsuite name="DemoTestSuite">
        <directory suffix="test.php">demo</directory>
    </testsuite>
</testsuites>

Test suite runs with following commands:

phpunit -c demosuite.xml --testsuite DemoTestSuite

Solution 7 - Php

Assumption:

> Phpunit (3.7) is available in the console environment.

Action:

Enter the following command in the console:

SHELL> phpunit "{{PATH TO THE FILE}}"

Comments:

You do not need to include anything in the new versions of PHPUnit unless you do not want to run in the console. For example, running tests in the browser.

Solution 8 - Php

I use ZF2 and work for me when replaced 'PHPUnit_Framework_TestCase' to '\PHPUnit\Framework\TestCase'

Solution 9 - Php

I got it working with

include("vendor/autoload.php");

at the top of my test function.

Solution 10 - Php

If you have Centos or other Linux distribution you have to install phpunit package, I did that with yum install phpunit and it worked. Maybe you can have to add a repository, but I think it has to work smooth with the default ones (I have CentOS 7)

Solution 11 - Php

It may well be that you're running WordPress core tests, and have recently upgraded your PhpUnit to version 6. If that's the case, then the recent change to namespacing in PhpUnit will have broken your code.

Fortunately, there's a patch to the core tests at https://core.trac.wordpress.org/changeset/40547 which will work around the problem. It also includes changes to travis.yml, which you may not have in your setup; if that's the case then you'll need to edit the .diff file to ignore the Travis patch.

  1. Download the "Unified Diff" patch from the bottom of https://core.trac.wordpress.org/changeset/40547

  2. Edit the patch file to remove the Travis part of the patch if you don't need that. Delete from the top of the file to just above this line:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
    
  3. Save the diff in the directory above your /includes/ directory - in my case this was the Wordpress directory itself

  4. Use the Unix patch tool to patch the files. You'll also need to strip the first few slashes to move from an absolute to a relative directory structure. As you can see from point 3 above, there are five slashes before the include directory, which a -p5 flag will get rid of for you.

    $ cd [WORDPRESS DIRECTORY]
    $ patch -p5 < changeset_40547.diff 
    

After I did this my tests ran correctly again.

Solution 12 - Php

NOTICE: Command php bin/console generate:doctrine:crud also create TestController in src/Tests so it can throw error when you tried to start server if you don't have UnitTests. Remove the file fix it!

Solution 13 - Php

For me, it was because I ran

$ phpunit .

instead of

$ phpunit

when I already had a configured phpunit.xml file in the working directory.

Solution 14 - Php

I am using php 5.6 on window 10 with zend 1.12 version for me adding

> require_once 'PHPUnit/Autoload.php';

before

> abstract class Zend_Test_PHPUnit_ControllerTestCase extends > PHPUnit_Framework_TestCase

worked. We need to add this above statement in ControllerTestCase.php file

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlvinView Question on Stackoverflow
Solution 1 - PhpShadiView Answer on Stackoverflow
Solution 2 - PhpdefinesView Answer on Stackoverflow
Solution 3 - PhpJijesh CherraiView Answer on Stackoverflow
Solution 4 - PhpThe OninView Answer on Stackoverflow
Solution 5 - PhpBevanView Answer on Stackoverflow
Solution 6 - PhpradeklosView Answer on Stackoverflow
Solution 7 - PhpSalman VirkView Answer on Stackoverflow
Solution 8 - PhpAlysson Vicuña de OliveiraView Answer on Stackoverflow
Solution 9 - PhpSpinstazView Answer on Stackoverflow
Solution 10 - PhpRicardo HerreroView Answer on Stackoverflow
Solution 11 - PhppiersbView Answer on Stackoverflow
Solution 12 - PhpMorganFreeFarmView Answer on Stackoverflow
Solution 13 - PhpcyberbitView Answer on Stackoverflow
Solution 14 - PhpShankarView Answer on Stackoverflow