2015-12-15 104 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

相關問題