phpunit mock没有默认方法,模拟SUT确实有效

时间:2015-08-18 01:06:43

标签: unit-testing symfony mocking phpunit

我试图测试一个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 个答案:

答案 0 :(得分:0)

由于我已经为测试类使用了命名空间,在我的情况下,我似乎必须使用实体的全名:

$subject = $this->getMockBuilder( '\BundleGroup\BundleName\Entity\RoiCalc' )

$mock = $this->getMock( '\BundleGroup\BundleName\Entity\RoiCalc' )