错误使用嘲弄laravel进行测试

时间:2014-11-27 01:11:11

标签: php unit-testing laravel mocking

我正试图用嘲弄的方法在我的laravel项目中测试一个类的方法 但是,当我尝试测试phpunit时,我的接口类(在我需要测试的方法中使用)是不可实例化的。
怎么了?

我的考试班

class HelperRSTest extends TestCase {

    public function tearDown()
    {
      Mockery::close();
    }

    public function test_mockery()
    {
        // $mock = Mockery::mock('HelperRS');
        // $mock->shouldReceive('getRecibosLocacao')->once()->andReturn('mocked');

        $result = HelperRS::getRecibosLocacao(1228);
        var_dump($result);
    }

}

我要测试的目标类

class HelperRS extends \BaseController {

    public static function getRecibosLocacao($id_locacao){

        $pagamentos = App::make('PagamentoRepositoryInterface');

        $locacao = Locacao::find($id_locacao);
        $pagamento = $pagamentos->getByVendaByTipo($locacao->cod_locacao, 'l');

        dd($pagamento);

    }

}

错误:

1) HelperRSTest::test_mockery
Illuminate\Container\BindingResolutionException: Target [PagamentoRepositoryInterface] is not instantiable.

1 个答案:

答案 0 :(得分:0)

您在HelperRS上调用的方法是一个静态方法,而您正在创建该类的模拟实例,而不是实际对其执行任何操作。您可以通过嘲弄来实现这一点,但不建议这样做,并且需要您在进程隔离中运行测试。

$mock = Mockery::mock('alias:HelperRS');
$mock->shouldReceive('getRecibosLocacao')->once()->andReturn('mocked');