Php 拉维尔清醒模拟工作

Php 拉维尔清醒模拟工作,php,laravel,laravel-6,Php,Laravel,Laravel 6,在我的应用程序中使用优秀的软件架构,我需要提供一些授权逻辑 我有一个authorized操作,它包含带有调用的逐步流程 从示意图上看,操作内容如下所示: 运行GetLocalAuthorizationDataJob 运行GetRemoteAuthorizationDataJob 运行CalculateJob GetRemoteAuthorizationDataJob@handle方法最终返回远程数据源请求的结果。让我们假设结果是一个数组 问题是如何在我的单元测试中用所需的数据模拟这个结

在我的应用程序中使用优秀的软件架构,我需要提供一些授权逻辑

我有一个
authorized操作
,它包含带有调用的逐步流程

从示意图上看,操作内容如下所示:

  • 运行
    GetLocalAuthorizationDataJob
  • 运行
    GetRemoteAuthorizationDataJob
  • 运行
    CalculateJob
GetRemoteAuthorizationDataJob@handle
方法最终返回远程数据源请求的结果。让我们假设结果是一个数组

问题是如何在我的单元测试中用所需的数据模拟这个结果?

我试图模仿这个方法
GetRemoteAuthorizationDataJob@handle
通常情况下:

    $this->instance(
        GetRemoteAuthorizationDataJob::class,
        \Mockery::mock(
            GetRemoteAuthorizationDataJob::class,
            function ($mock) {
                $mock->shouldReceive('handle')->andReturn([
                    'key_1' => 'required_value_1',
                     //...
                    'key_n' => 'required_value_n',
                ]);
            }
        )
    );

但在我的情况下,它没有帮助。

当前实现的唯一解决方案是部分模拟调用该操作的功能,或部分模拟调用该作业的操作

功能模拟

仅当操作本身有保证其工作的测试时,才建议这样做


$mFeature=m::mock(CustomFeature::class)->makePartial();
$mFeature->shouldReceive('run')
->使用(AuthorizeOperation::class$params)
->安德烈(结果);
工作电话嘲笑

$moOperation=m::mock(AuthorizeOperation::class)->makePartial();
$MOOPERATION->shouldReceive('run')
->使用(GetRemoteAuthorizationDataJob::class,$params)
->安德烈(结果);
部分模拟允许非模拟方法实际执行模拟方法调用中返回的结果,尽管
with()
中的参数必须与分派类中传递给
$this->run
的参数完全匹配


在内部,我们一直在讨论一种比这更好的方法,它允许您的方法工作(替换容器中的单元实例),这将使您在发布后尽快发布