2015-12-15 72 views
0

我想用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 

任何人都可以帮助我吗?

+0

如果自动加载被破坏,请显示'composer.json'文件。另外,为什么它在'BaseballTest'中被破坏 - 一个你没有显示的测试类。 – Sven

+0

对不起,我复制了错误的错误行。我刚刚编辑它。我将分享'compose.json'文件。 – Fawzan

+0

仅供参考我不认为它是作曲家自动加载的问题。我有一个虚拟的'assertTrue',它工作正常。 – Fawzan

回答

1

对于您自己的代码,您的composer.json中没有任何自动加载,因此引导程序vendor/autoload.php只会加载依赖关系 - 在本例中仅为PHPUnit。

您仍然需要加载您想要测试的类。最简单的方法就是与作曲家定义自动加载:

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

+0

感谢您的提示。我将自动加载添加到'composer.json'中,并且它工作正常。 – Fawzan

相关问题