2014-02-14 3 views
2

Я использую XAMPP 1.8.1, Windows 7 64 бит, Netbeans IDE 7.4 Я установил PHPUnit. Когда я запускаю код, я получаю следующую ошибку.Неустранимая ошибка: Class 'PHPUnit_Framework_TestCase' не найден

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in D:\xampp\htdocs\PHPUnit\index.php on line 6

Кодекс:

<?php 

class StackTest extends PHPUnit_Framework_TestCase { 

    public function testPushAndpop() { 
     $stack = array(); 
     $this->assertEquals(0, count($stack)); 

     array_push($stack, 'foo'); 
     $this->assertEquals('foo', $stack[count($stack) - 1]); 
     $this->assertEquals(1, count($stack)); 

     $this->assertEquals('foo', array_pop($stack)); 
     $this->assertEquals(0, count($stack)); 
    } 

} 

?> 

Я добавил D: \ XAMPP \ PHP в переменной окружения PATH кто-нибудь предложить мне, как решить эту проблему? Спасибо заранее.

ответ

3

Вы пытаетесь запустить тест в веб-браузере? Это немного смутило меня. Тесты PHPUnit записываются для запуска в командной строке.

4

Вы не упомянули, какую версию PHP вы используете, но если это 3.5 или выше, просто добавьте

require_once 'PHPUnit/Autoload.php'; 

В верхней части кода, чтобы тянуть в нужных файлов.

Если нет, то используйте:

require_once 'PHPUnit/Framework/TestCase.php'; 

Это маловероятно, что вы используете версию раньше, чем 3.5, но я включил, что на всякий случай.

2

Думаю, вам просто нужно получить последнюю версию PHPUnit и не включать файлы, как указано ниже. Это работает для меня, когда я повышен до последней версии, но бегала старые Юнит-тесты, которые имели:

require_once 'PHPUnit/Framework/TestCase.php'; 

Удаление этой линии фиксированной проблемы.

1

Для тех, кто прибыл сюда после обновления версии Phpunit до версии 6. Вам нужно будет переименовать класс, как: \PHPUnit_Framework_TestCase к \PHPUnit\Framework\TestCase

2

Для новых версий PHPUnit вам нужно расширить TestCase только вместо PHPUnit_Framework_TestCase с помощью использования use PHPUnit\Framework\TestCase;

Старых и Depricated Пути:

// No namespace in this old method 

class ClassATest extends PHPUnit_Framework_TestCase { 

} 

Новый способ, принятый в версиях, как 6.x:

// Namespace used in this new method 

use PHPunit\Framework\TestCase; 

class ClassATest extends TestCase { 

} 

Если вы не используете этот новый метод, вы столкнетесь с трудностями. Примите это, и это устранит вашу проблему.

0

Существует два уровня ответов.

Первая проблема, для некоторых, является то, что, в то время как имена классов регистра Инсентив в PHP, автозагрузчик иногда нет, так что вы будете необходимо использовать правильное имя родительского класса: PHPUnit_Framework_TestCase

Вторая проблема заключается в несовместимости PHPUnit 6 с самим собой. Если вы, как и многие другие, должно быть в состоянии написать testcases, которые работают с любой версией, создайте новый заголовочный файл со следующим содержанием:

<?php 

if (!class_exists('PHPUnit_Framework_TestCase') && 
    class_exists('\\PHPUnit\\Framework\\TestCase')) { 
    abstract class PHPUnit_Framework_TestCase extends \PHPUnit\Framework\TestCase { 
    } 
} 

Затем включить этот файл в верхней части каждой TestCase. В testcases сами продолжают наследоваться от вышеупомянутого класса, например, в коде шахты:

class Minijson_Tests extends PHPUnit_Framework_TestCase { 

Вопреки ранее рекомендаций, в том числе PHPUnit/Autoload.php или PHPUnit/Framework/TestCase.php, оказалось ненужным и с PHPUnit 4.2.6 (Debian Jessie) и 6.5.5 (Debian sid). Также нет необходимости писать phpunit.xml, bootstrap.php и т. Д., Как указано в аналогичном совете.

Смежные вопросы