1

私はこのクラスを持っています:

class PagSeguro {

    public function pay()
    {
        if ( ! $this->checkAllData() )
        {
            return false;
        }

        return $this->buildPaymentURL();
    }

    private function checkAllData()
    {
        return true;
    }

    private function buildPaymentURL()
    {
        echo "not cool!\n\n";

        return true;
    }

}

そして、このテスト:

public function testPagSeguroPaymentData()
{
    $m = m::mock('PagSeguro[buildPaymentURL]');

    $m->shouldReceive('buildPaymentURL')
        ->once()
        ->andReturn('http://');

    $this->assertEquals($m->pay(), 'http://');
}

var_dump($m) を実行すると、モックされたメソッドが表示されます。

    'buildPaymentURL' =>
    class Mockery\ExpectationDirector#1507 (5) {
      protected $_name =>
      string(15) "buildPaymentURL"
      protected $_mock =>
              ...

      protected $_expectations =>
      array(1) {
        ...
      }
      protected $_expectedOrder =>
      NULL
      protected $_defaults =>
      array(0) {
        ...
      }
    }
  }

しかし、テストが実行されると、モックされたものではなく、実際のものが呼び出されます。改名しないと

private function buildPaymentURL_RENAMED() {}

そして、私は緑を手に入れます。

Mockery を使用してこれらの部分的なモックを行う正しい方法を教えてくれる人はいますか?

4

1 に答える 1