我正在尝试测试一个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都会发生此行为
1 回答
因为我已经为测试类使用了命名空间,所以我似乎必须使用实体的全名,在我的例子中:
要么