类中找不到名称空间
问题描述:
我想用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": "[email protected]"
}
],
"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
任何人都可以帮助我吗?
答
对于您自己的代码,您的composer.json
中没有任何自动加载,因此引导程序vendor/autoload.php
只会加载依赖关系 - 在本例中仅为PHPUnit。
您仍然需要加载您想要测试的类。最简单的方法就是与作曲家定义自动加载:
- https://getcomposer.org/doc/01-basic-usage.md#autoloading
- https://getcomposer.org/doc/04-schema.md#autoload
作为一个快速的解决方法,你仍然可以使用require_once()
在测试的顶部(命名空间线下同)加载测试的类,但这应该只是捷径来证明你的代码工作。习惯于将自动加载定义添加到composer.json
从长远来看更容易。
+0
感谢您的提示。我将自动加载添加到'composer.json'中,并且它工作正常。 – Fawzan
如果自动加载被破坏,请显示'composer.json'文件。另外,为什么它在'BaseballTest'中被破坏 - 一个你没有显示的测试类。 – Sven
对不起,我复制了错误的错误行。我刚刚编辑它。我将分享'compose.json'文件。 – Fawzan
仅供参考我不认为它是作曲家自动加载的问题。我有一个虚拟的'assertTrue',它工作正常。 – Fawzan