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
的参数完全匹配
在内部,我们一直在讨论一种比这更好的方法,它允许您的方法工作(替换容器中的单元实例),这将使您在发布后尽快发布