Reflection 在PHPUnit中使用反射

Reflection 在PHPUnit中使用反射,reflection,symfony,phpunit,Reflection,Symfony,Phpunit,我正在用PHPUnit测试Symfony2项目中使用的一个类的私有方法。 我正在使用许多开发人员描述的私有方法测试策略(通过反射),例如 但不幸的是,我犯了以下错误: 出现1个错误:1)我的\CalendarBundle\Tests\Calendar\CalendarTest::testCalculateDaysPreviousMonth ReflectionException:Class Calendar不存在/Library/WebServer/Documents/Calendar/src/

我正在用PHPUnit测试Symfony2项目中使用的一个类的私有方法。 我正在使用许多开发人员描述的私有方法测试策略(通过反射),例如

但不幸的是,我犯了以下错误:

出现1个错误:1)我的\CalendarBundle\Tests\Calendar\CalendarTest::testCalculateDaysPreviousMonth ReflectionException:Class Calendar不存在/Library/WebServer/Documents/Calendar/src/My/CalendarBundle/Tests/Calendar/CalendarTest.php:47


创建反射方法时,即使包含
use
语句,也需要使用整个名称空间的类名

new \ReflectionClass('My\CalendarBundle\Calendar\Calendar');
这是因为您将类名作为字符串传递给构造函数,因此它不知道您的
use
语句,而是在全局命名空间中查找类名

此外,为了实现它的价值,您实际上不需要创建一个
ReflectionClass
,然后对其调用
getMethod()
。相反,您可以直接创建一个
ReflectionMethod
对象

new \ReflectionMethod('My\CalendarBundle\Calendar\Calendar', 'calculateDaysPreviousMonth');

基本上应该是一样的,但要短一点。

非常感谢!我对单元测试非常陌生,每一条建议都很宝贵!:)
new \ReflectionMethod('My\CalendarBundle\Calendar\Calendar', 'calculateDaysPreviousMonth');