У меня есть PHP-проект со следующей структурой проекта.
php_test_app src Vegetable.php tests StackTest.php VegetableTest.php
Код этих файлов показан ниже. Я использую PDT и PTI в Eclipse. PHPUnit в Eclipse распознает, что VegetableTest.php
принадлежит Vegetable.php
, потому что вы можете переключаться между ними с помощью кнопки переключения.
Сначала я пытаюсь запустить тестовый код, выбрав каталог тестов в Проводнике PHP и нажмите « Run Selected PHPUnit Test
. Он запускает оба теста, и VegetableTest
терпит неудачу со следующей трассировкой: Fatal error: Class 'Vegetable' not found in /Users/erwin/Documents/workspace/php_test_app/tests/VegetableTest.php on line 8
. Аналогичная проблема была опубликована здесь: phpunit не может найти Class, PHP Fatal error .
Действительно, я еще не включил свой исходный код, поэтому теперь я раскомментирую включение в VegetableTest.php
, как показано ниже. Если я сейчас попытаюсь запустить тесты таким же образом, PHPUnit не распознает какой-либо тестовый код! Даже StackTest
, который не изменяется, не распознается.
Изменение оператора include также не работает; Я попробовал следующее.
include 'Vegetable.php'; include 'src/Vegetable.php'; include '../src/Vegetable.php';
Vegetable.php
<?php // base class with member properties and methods class Vegetable { var $edible; var $color; function Vegetable($edible, $color="green") { $this->edible = $edible; $this->color = $color; } function is_edible() { return $this->edible; } function what_color() { return $this->color; } } // end of class Vegetable // extends the base class class Spinach extends Vegetable { var $cooked = false; function Spinach() { $this->Vegetable(true, "green"); } function cook_it() { $this->cooked = true; } function is_cooked() { return $this->cooked; } } // end of class Spinach
StackTest.php
<?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)); } } ?>
VegetableTest.php
<?php // require_once ('../src/Vegetable.php'); class VegetableTest extends PHPUnit_Framework_TestCase { public function test_constructor_two_arguments() { $tomato = new Vegetable($edible=True, $color="red"); $r = $tomato.is_edible(); $this->assertTrue($r); $r = $tomato.what_color(); $e = "red"; $this->assertEqual($r, $e); } } class SpinachTest extends PHPUnit_Framework_TestCase { public function test_constructor_two_arguments() { $spinach = new Spinach($edible=True); $r = $spinach.is_edible(); $this->assertTrue($r); $r = $spinach.what_color(); $e = "green"; $this->assertEqual($r, $e); } } ?>