30478


FuelPHPを使用しています。  
↓のようなコードのテストをPHPUnitで行いたいと考えています。

[code]

    class Item_Relation extends \Utility\base {
        public function get_item_info($account, $item_name) {
            $item_master_instance = new \Utility\Item_Master();
            $item_master_id = $item_master_instance->get_id($account, $item_name);
            return $item_master_id;
        }
    }
    
[/code]

get_idメソッドと_get_item_infoメソッドのテストをモックでやろうとしているのですが、  
↓のコードを書くとモックで既存のメソッドを置き換えてくれません。

[code]

    class Test_Item_Relation extends TestCase
    {
        private $item_relation_instance = null;
        public function setUp() {
            $this->item_relation_instance = new \Utility\Item_Relation();
        }
        /**
         * @test
         */
        public function get_item_info() {
            $item_master_mock = $this->getMockBuilder(\Utility\Item_Master::class)
                ->setMethods(['get_id'])
                ->getMock();
            $item_master_mock->expects($this->once())
                ->method('get_id')
                ->will($this->returnValue(1));
    
            $item_master_id = $this->item_relation_instance->get_item_info('unit_test_account', 'item_name');
    
            $this->assertSame(1, $item_master_id);
        }
    }
    
[/code]

PHPUnitのマニュアルを見て↑を書いたのですが、想定通り動かないので、  
ご教授いただけますと幸いです。


CC BY-SA 3.0
2016-11-09T11:56:11.407
30270
2016-11-17T07:25:31.120
2016-11-09T12:02:03.697
7918
7918
question
php fuelphp phpunit テスト
PHPUnitのモック機能を使いテストを行いたいのですが、うまく置き換わってくれません。


自己解決しましたので、解決策を書きます。  
調べていくといろいろ勘違いしていた部分が分かったのですが、  
私のやりたかったことはJava(djUnit)でいう  
バーチャルモックをPHPUnitでどうやって実装するかということでした。

いくつかのテックブログで  
依存関係があるメソッドを置き換えてくれるライブラリは  
PHPUnitには存在しないと書かれていたので  
AspectMockを導入することで解決しました。  
<https://github.com/Codeception/AspectMock>


CC BY-SA 3.0
2016-11-17T07:25:31.120
30478
2016-11-17T07:25:31.120
7918
30270
answer