2015-11-06 56 views
0

我刚开始学习PHPUnit。我有一个看似非常简单的测试;PHPUnit_Framework_Assert :: assertClassHasStaticAttribute()必须是类名

namespace stats\Test; 

use stats\Fetch; 

class FetchTest extends \PHPUnit_Framework_TestCase 
{ 

    public function setUp() 
    { 
     $this->fetch = new Fetch; 
    } 

    public function testStoresListOfAssets() 
    { 
     $this->assertClassHasStaticAttribute('paths', 'Fetch'); //line 17 
    } 

} 

My Fetch class is;

namespace stats; 

class Fetch 
{ 
    public static $paths = array(
     'jquery' => 'http://code.jquery.com/jquery.js' 
    ); 
} 

运行PHPUnit时出现错误; PHPUnit_Framework_Exception: Argument #2 (string#Fetch)of PHPUnit_Framework_Assert::assertClassHasStaticAttribute() must be a class name

这也可能是一件很愚蠢,但我不明白的问题

回答

1

的PHPUnit_Framework_Assert使用PHP的方法class_exists检查您是否已经指示的类名是正确的(检查this link看到完整的代码):

if (!is_string($className) || !class_exists($className, FALSE)) { 
    throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'class name'); 
} 

你有这里的问题是方法class_exists没有考虑到这个命令:

use stats\Fetch; 

因此,您必须指示完整路径才能使其正常工作。在this link of stackoverflow中,您可以找到有关该问题的更多信息。您应该将断言改变这样的事情:

$this->assertClassHasStaticAttribute('paths', '\\stats\\Fetch');

+0

我无意中发现这个回答我自己约30秒前。我刚刚尝试过''stats \ Fetch'',它工作。感谢您提供正确的答案 – mikelovelyuk

0

你不提供完全合格的类名和assertClassHasStaticAttribute的情况下()或你的范围以外的任何其他方法/函数(测试)类补充类名称的使用语句。

如果您使用PHP 5.5或更高版本(您应该;)使用Fetch::class

一般来说,你应该更喜欢的类名字符串::类如改变类名,如果你使用字符串这是接近不可能的,当现代的IDE可以帮助您与重构。

概括起来讲,你比如这将是:

public function testStoresListOfAssets() 
{ 
    $this->assertClassHasStaticAttribute('paths', Fetch::class); 
} 
相关问题