service = app('StationTaskCommodityService'); $this->data['batches'] = factory(Batch::class, $this->batchAmount) ->create([ 'status'=>'未处理', ]); $this->data['orders'] = factory(Order::class, $this->orderAmount) ->create([ 'status'=>'未处理', 'batch_id'=>(function(){ if(!isset($this->data['temBatchId_orders'])){ $this->data['temBatchId_orders']=$this->batchAmount; } $this->data['temBatchId_orders']++; if($this->data['temBatchId_orders']>=$this->batchAmount)$this->data['temBatchId_orders']=0; return $this->data['batches'][$this->data['temBatchId_orders']]; })(), ]); $this->data['orderBins'] = factory(OrderBin::class, $this->orderAmount) ->create([ 'order_id'=>(function(){ if(!isset($this->data['temOrderId_ordersBins'])){ $this->data['temOrderId_ordersBins']=-1; } $this->data['temOrderId_ordersBins']++; return $this->data['orders'][$this->data['temOrderId_ordersBins']]; })(), 'number'=>(function(){ if(!isset($this->data['temNumber_ordersBins'])){ $this->data['temNumber_ordersBins']=-1; } $this->data['temNumber_ordersBins']++; return $this->data['temNumber_ordersBins']; })(), ]); $this->data['orderCommodities'] = factory(OrderCommodity::class, $this->orderCommodityAmount) ->create([ 'order_id'=>(function(){ if(!isset($this->data['temOrderId_orderCommodities'])){ $this->data['temOrderId_orderCommodities']=$this->orderAmount; } $this->data['temOrderId_orderCommodities']++; if($this->data['temOrderId_orderCommodities']>=$this->orderAmount)$this->data['temOrderId_orderCommodities']=0; return $this->data['orders'][$this->data['temOrderId_orderCommodities']]; })(), ]); } 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; } public function testReturned() { $stationTypeServiceMock=$this->subMock([ 'class'=>StationTypeService::class, 'methods'=>[ // 'getByBatch'=>111, ], 'subServices'=>[ [ 'serviceName'=>'stationRuleBatchService', 'class'=>stationRuleBatchService::class, 'methods'=>[ 'getByBatch'=>4242, 'aaa'=>222, ], ], ] ]); dd($stationTypeServiceMock->getByBatch(new Batch())); // $stationTypeServiceMock=( function (){ // $stationTypeServiceMock=$this->createPartialMock( // StationTypeService::class, // ['aaa'] // ); // $stationRuleBatchServiceStr = 'stationRuleBatchService'; // $stationTypeServiceMock->instant( // $stationRuleBatchServiceStr, // ($stationRuleBatchServiceMock=function(){ // $mock=$this->createPartialMock( // StationRuleBatchService::class, // ['getByBatch'] // ); // $mock->method('getByBatch')->willReturn('ddd'); // return $mock; // })() // ); // return $stationTypeServiceMock; // })(); $this->data['stationTaskCommodities'] =(function(){ if(!isset($this->data['stationTaskCommodities'])) $this->data['stationTaskCommodities'] = collect(); foreach($this->data['batches'] as $batch){ $this->data['stationTaskCommodities'] =$this->data['stationTaskCommodities']->merge( $this->service->createByBatch($batch)//<<---testing it ); } return $this->data['stationTaskCommodities']; })(); $this->assertEquals($this->orderCommodityAmount, $this->data['stationTaskCommodities']->count()); } function tearDown(): void { StationTaskCommodity::query() ->whereIn('id',data_get($this->data['stationTaskCommodities'],'*.id')??[]) ->delete(); Batch::query() ->whereIn('id',data_get($this->data['batches'],'*.id')??[]) ->delete(); Order::query() ->whereIn('id',data_get($this->data['orders'],'*.id')??[]) ->delete(); OrderBin::query() ->whereIn('id',data_get($this->data['orderBins'],'*.id')??[]) ->delete(); OrderCommodity::query() ->whereIn('id',data_get($this->data['orderCommodities'],'*.id')??[]) ->delete(); parent::tearDown(); } }