Reflection 在PHPUnit中使用反射
我正在用PHPUnit测试Symfony2项目中使用的一个类的私有方法。 我正在使用许多开发人员描述的私有方法测试策略(通过反射),例如 但不幸的是,我犯了以下错误: 出现1个错误:1)我的\CalendarBundle\Tests\Calendar\CalendarTest::testCalculateDaysPreviousMonth ReflectionException:Class Calendar不存在/Library/WebServer/Documents/Calendar/src/My/CalendarBundle/Tests/Calendar/CalendarTest.php:47Reflection 在PHPUnit中使用反射,reflection,symfony,phpunit,Reflection,Symfony,Phpunit,我正在用PHPUnit测试Symfony2项目中使用的一个类的私有方法。 我正在使用许多开发人员描述的私有方法测试策略(通过反射),例如 但不幸的是,我犯了以下错误: 出现1个错误:1)我的\CalendarBundle\Tests\Calendar\CalendarTest::testCalculateDaysPreviousMonth ReflectionException:Class Calendar不存在/Library/WebServer/Documents/Calendar/src/
创建反射方法时,即使包含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');