いつもお世話になっております。
PHP Unitでモックオブジェクト作成し、モックしたメソッドを呼び出すと、
PHPUnit_Framework_MockObject_BadMethodCallException:
となり、テストが失敗してしまいます。
実行環境と実際のコードを以下に添付しますので、
どなたかご教授いただけますか?
<実行環境>
- PHP:5.5(古いですね(笑))
- PHPUnitのversion:4.8.21(こちらも古い...)
<コード(抜粋)>
以下になります。
質問内容とは関係ありませんが、ユーザの課金情報をロギングする機能に対するテストになります。
php
1 2<?php 3 4//1.テスト対象のコードは、以下になります 5 6class SocialApiUtil{ 7 /** 8 * KPI算出用に、ユーザの課金情報をロギングする 9 */ 10 public function loggingPaymentInfoForKpi(array $paymentInfo,$logUtil) 11 { 12 //... 13 14 //ロギング用のメソッドです。以下2つを引数に取ります。 15 //1.ロギングする際のタイトル情報(課金についてのログ、ログインについてのログetc...) 16 //2.ロギングしたい変数 17 $logUtil->kpiLogger( 18 'yamada_purchase_amount', 19 array( 20 'use_paid_coin' => $paymentInfo['use_coin'], 21 'use_free_coin' => $paymentInfo['use_free_coin'] 22 )); 23 24 return true; 25 } 26} 27 28 29//2.ユニットテストのコードは、以下です 30 31class SocialApiUtilTest extends PHPUnit_Framework_TestCase{ 32 /** 33 * データプロバイダ 34 * @dataProvider loggingPaymentInfoForKpiProvider 35 */ 36 public function loggingPaymentInfoForKpiProvider() 37 { 38 39 $paymentInfo = array( 40 'use_coin' => 0, 41 'use_free_coin' => 100, 42 ); 43 44 //ここで、ロギング用オブジェクトのモックを作ります。 45 //with($this->anything())としているので、上手くいくように思えるのですが、 46 //呼び出すとPHPUnit_Framework_MockObject_BadMethodCallException が発生します... 47 $logUtil = $this->getMockBuilder('LogUtil')->disableOriginalConstructor()->getMock(); 48 $logUtil->expects($this->any())->method('kpiLogger')->with($this->anything())->will($this->returnValue(true)); 49 50 return array( 51 '正常ケース' => array($paymentInfo,$logUtil,true), 52 '引数が不正' => array(array(),$logUtil,false), 53 ); 54 } 55 56 /** 57 * 課金情報のロギングのテスト 58 * @dataProvider loggingPaymentInfoForKpiProvider 59 */ 60 public function testLoggingPaymentInfoForKpiProvider($paymentInfo,$logUtil,$expectedRet) 61 { 62 $actualRet = $this->apiUtil->loggingPaymentInfoForKpi($paymentInfo,$logUtil); 63 $this->assertSame($expectedRet ,$actualRet); 64 } 65}
以上になります。PHPUnit使ってると、色々苦労すること多いですね^^;
mockeryが使いやすいと聞いたので、ちょっと試してみようかなーと思ってます。
それでは、ご回答よろしくお願いします!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/10 04:08