PHPUnit找不到源代码

时间:2015-03-24 11:54:55

标签: php eclipse phpunit php-include

我有一个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也未被识别。

  1. 我应该如何制作包含单元测试的包含 识别?
  2. 我是否需要指定完整路径,或仅指定名称 定义类的文件?
  3. 更改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);
        }
    }
    ?>
    

1 个答案:

答案 0 :(得分:1)

phpunit --bootstrap src/Vegetable.php tests指示PHPUnit在运行src/Vegetable.php中的测试之前加载tests

请注意,--bootstrap应与自动装带器脚本一起使用,例如由ComposerPHPAB生成的脚本。

另请参阅PHPUnit网站上的Getting Started部分。