TestMockSubServices.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace App\Traits;
  3. trait TestMockSubServices{
  4. function subMock(array $serviceDefinition){
  5. $mockingService=$this->createPartialMock(
  6. $serviceDefinition['class'],
  7. isset($serviceDefinition['methods'])
  8. ?array_keys($serviceDefinition['methods']):[]
  9. );
  10. if(isset($serviceDefinition['methods']))
  11. foreach ($serviceDefinition['methods'] as $mName=>$mVal){
  12. $mockingService->method($mName)->willReturn($mVal);
  13. }
  14. if(isset($serviceDefinition['subServices']))
  15. foreach ($serviceDefinition['subServices'] as $subService){
  16. $mockingService->instant(
  17. $subService['serviceName'],
  18. ($subServiceMock=function()use($subService){
  19. $subServiceMock=$this->createPartialMock(
  20. $subService['class'],
  21. array_keys($subService['methods'])
  22. );
  23. if(isset($subService['methods']))
  24. foreach ($subService['methods'] as $methodName=>$methodVal){
  25. $subServiceMock->method($methodName)->willReturn($methodVal);
  26. }
  27. return $subServiceMock;
  28. })()
  29. );
  30. }
  31. return $mockingService;
  32. }
  33. function getTargetIdCirculately($targetArr, $additionMark='', $idName='id'){
  34. $amount = count($this->data['batches']);
  35. $iName = 'i_' . md5(json_encode($targetArr) . $additionMark);
  36. if(!isset($this->data[$iName])){
  37. $this->data['$iName']=$amount;
  38. }
  39. $this->data['$iName']++;
  40. if($this->data['$iName']>=$this->batchAmount)
  41. $this->data['$iName']=0;
  42. return $targetArr[$this->data['$iName']][$idName];
  43. }
  44. }