浏览代码

伪造子桩件的简易封装

LD 5 年之前
父节点
当前提交
b9f16baa13
共有 2 个文件被更改,包括 34 次插入1 次删除
  1. 2 1
      app/Console/Commands/stubs/test.service.stub
  2. 32 0
      app/Traits/TestMockSubServices.php

+ 2 - 1
app/Console/Commands/stubs/test.service.stub

@@ -4,10 +4,11 @@ namespace {{ namespace }};
 use App\Services\{{ serviceName }};
 use Tests\TestCase;
 use App\{{ modelNameUc }};
+use App\Traits\TestMockSubServices;
 
 class {{ class }} extends TestCase
 {
-
+    use TestMockSubServices;
     /** @var {{ serviceName }} $service */
     public $service;
     private $data;

+ 32 - 0
app/Traits/TestMockSubServices.php

@@ -0,0 +1,32 @@
+<?php
+namespace App\Traits;
+
+trait TestMockSubServices{
+    function subMock(array $serviceDefinition){
+        $mockingService=$this->createPartialMock(
+            $serviceDefinition['class'],
+            array_keys($serviceDefinition['methods'])
+        );
+        foreach ($serviceDefinition['methods'] as $mName=>$mVal){
+            $mockingService->method($mName)->willReturn($mVal);
+        }
+
+        foreach ($serviceDefinition['subServices'] as $subService){
+            $mockingService->instant(
+                $subService['serviceName'],
+                ($subServiceMock=function()use($subService){
+                    $subServiceMock=$this->createPartialMock(
+                        $subService['class'],
+                        array_keys($subService['methods'])
+                    );
+                    foreach ($subService['methods'] as $methodName=>$methodVal){
+                        $subServiceMock->method($methodName)->willReturn($methodVal);
+                    }
+                    return $subServiceMock;
+                })()
+            );
+        }
+        return $mockingService;
+    }
+
+}