我试图测试一个Symfony实体' RoiCalc'和phpunit的模拟框架没有按预期工作。
示例1:
我想测试控制器中的计算函数正好调用某些实体getter两次:
$subject = new RoiCalcController();
$snippets = array(
...some data...
);
$entityMock = $this->getMock( 'RoiCalc' );
$entityMock->expects( $this->exactly( 2 ) )->method( 'getFeedCost' );
$subject->doResultCalculation( $entityMock, $snippets );
在此示例中,我收到错误消息
Call to undefined method Mock_RoiCalc_6dec5a53::getHerdSize()
我期待$ this-> getMock(' RoiCalc');会嘲笑班上的所有方法,至少是公共方法吗? getHerdSize是一个公共函数
示例2:
我想检查我的实体中的方法setDefault是否从数组中设置了正确的值:
$snippets = array(
'roi_early_season_milk_production_day' => 2,
'roi_typical_nvo_cows_9_default' => 3,
'roi_typical_nvo_cows_21_default' => 4,
'roi_value_ms_default' => 5,
'roi_cost_of_feed' => 6,
'roi_extra_feed_cow_day' => 7,
'roi_incremental_value_heifer_default' => 8,
'roi_dib_synch_treatment_cost_default' => 9,
'roi_reduction_nvo_next_year_9' => 10,
'roi_reduction_nvo_next_year_21' => 11
);
$subject = $this->getMockBuilder( 'RoiCalc' )
->setMethods('setTreatmentOptionId')
->getMock();
$subject->expects( $this->once )->method( 'setTreatmentOptionId' )->with ( $this->equalsTo( 1 ) );
$subject->setDefaults( $snippets );
在这种情况下,我收到错误
Call to undefined method Mock_RoiCalc_f857be9e::setDefaults()
我期望对于这个部分模拟,所有函数都将来自我的类,除了setTreatmentOptionId
PHPUnit 3.8.27和4.0.20
都会发生这种情况答案 0 :(得分:0)
由于我已经为测试类使用了命名空间,在我的情况下,我似乎必须使用实体的全名:
$subject = $this->getMockBuilder( '\BundleGroup\BundleName\Entity\RoiCalc' )
或
$mock = $this->getMock( '\BundleGroup\BundleName\Entity\RoiCalc' )