【问题标题】:Error make test with mockery laravel使用嘲弄 laravel 进行测试时出错
【发布时间】:2015-01-25 12:19:34
【问题描述】:

我正在尝试用 mockery 测试我的 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.

【问题讨论】:

    标签: php unit-testing laravel mocking


    【解决方案1】:

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

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

    【讨论】:

    • 我是单元测试的新手。如何在一个孤立的进程中运行测试?我真的可以测试静态方法吗?
    • 这个过程“Mockery::mock('something')”,我总是需要在开始测试之前这样做吗?不能在运行时完成?
    • @RafaelSoufraz 使用 \@runInSeperateProcess 注释运行一个进程隔离的测试,你应该可以在测试期间调用 Mockery::mock
    猜你喜欢
    • 2019-02-27
    • 2021-03-03
    • 1970-01-01
    • 2020-09-06
    • 2018-08-14
    • 2017-09-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多