我有一个PHP项目,具有以下项目结构。
php_test_app
src
Vegetable.php
tests
StackTest.php
VegetableTest.php
这些文件的代码如下所示。我在Eclipse中使用PDT和PTI。 Eclipse中的PHPUnit识别VegetableTest.php
属于Vegetable.php
,因为您可以使用切换按钮在它们之间切换。
我首先尝试通过在PHP Explorer中选择tests目录来运行测试代码,然后单击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 cannot find Class, PHP Fatal error。
确实,我还没有包含我的源代码,所以现在我取消注释VegetableTest.php
中的include,如下所示。如果我现在尝试以相同的方式运行测试,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);
}
}
?>
答案 0 :(得分:1)
phpunit --bootstrap src/Vegetable.php tests
指示PHPUnit在运行src/Vegetable.php
中的测试之前加载tests
。
请注意,--bootstrap
应与自动装带器脚本一起使用,例如由Composer或PHPAB生成的脚本。
另请参阅PHPUnit网站上的Getting Started部分。