在nameSpace中找不到类

时间:2015-12-15 01:31:28

标签: php namespaces phpunit

我正在尝试使用PHPUnit运行单元测试。但我得到class not found error。我现在已经尝试了很长时间,但我仍然无法找到问题所在。

这是文件夹结构。

我在Calc文件夹中有<base>/stats/cls类 并在<base>/stats/Tests文件夹

中测试文件

composer.json档案

{
    "name": "app/test",
    "description": "I am learning PHPUnit",
    "authors": [
        {
            "name": "Fawzan",
            "email": "xxxxxx@xxx.xxx"
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "require-dev": {
        "phpunit/phpunit" : "*"
    }
}

Calc.php档案

<?php

namespace stats\cls;

class Calc
{

    public function add($a, $b)
    {
        return $a + $b;
    }

}

CalcTest.php档案

<?php     
namespace stats\Tests;

use stats\cls\Calc;

class CalcTest extends \PHPUnit_Framework_TestCase
{


    public function testAddEquals()
    {

        $x = 10;
        $y = 20;

        $baseball = new Calc();

        $result = $baseball->add($x, $y);

        $expectedResult = $x + $y;

        var_dump($result);

        $this->assertEquals($expectedResult, $result);

    }
}

phpunit.xml档案

<?xml version="1.0" encoding="utf-8" ?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="Application Test Unit">
            <directory>./stats/Tests/</directory>
        </testsuite>
    </testsuites>
</phpunit>

当我运行phpunit命令时,我收到以下错误。

PHP Fatal error:  Class 'stats\cls\Calc' not found in /var/www/stats/Tests/CalcTest.php on line 26

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您的composer.json中没有自己的代码自动加载,因此bootstrapping vendor/autoload.php只会加载依赖项 - 在本例中为PHPUnit。

您仍然需要加载要测试的课程。最简单的方法是使用Composer定义自动加载:

作为一种快速解决方法,您仍然可以在测试顶部(命名空间行下方)使用require_once()来加载测试类,但这只是证明代码有效的捷径。从长远来看,习惯于将自动加载定义添加到composer.json更容易。