77 */
88trait ObjectHelper
99{
10+ private $ mockRegistry = [];
11+
1012 public function getObject (string $ className , array $ arguments = [])
1113 {
1214 $ constructArguments = $ this ->getConstructorArguments ($ className , $ arguments );
1315 return new $ className (...array_values ($ constructArguments ));
1416 }
1517
18+ public function retrieveChildMock (string $ className , string $ parameterName )
19+ {
20+ if (!isset ($ this ->mockRegistry [$ className ][$ parameterName ])) {
21+ throw new \RuntimeException (
22+ sprintf (
23+ 'No object parameter named: "%s" was created for object: "%s" ' ,
24+ $ parameterName ,
25+ $ className
26+ )
27+ );
28+ }
29+
30+ return $ this ->mockRegistry [$ className ][$ parameterName ];
31+ }
32+
1633 private function getConstructorArguments (string $ className , array $ arguments = [])
1734 {
1835 $ constructArguments = [];
@@ -38,16 +55,18 @@ private function getConstructorArguments(string $className, array $arguments = [
3855
3956 if ($ parameter ->getClass ()) {
4057 $ argClassName = $ parameter ->getClass ()->getName ();
41- $ object = $ this ->getMockObject ($ argClassName , $ arguments );
58+ $ object = $ this ->prophesize ($ argClassName );
59+
60+ //store this dep for later so we can retrieve it
61+ if (!isset ($ this ->mockRegistry [$ className ])) {
62+ $ this ->mockRegistry [$ className ] = [];
63+ }
64+
65+ $ this ->mockRegistry [$ className ][$ parameterName ] = $ object ;
4266 }
4367
44- $ constructArguments [$ parameterName ] = null === $ object ? $ defaultValue : $ object ;
68+ $ constructArguments [$ parameterName ] = null === $ object ? $ defaultValue : $ object-> reveal () ;
4569 }
4670 return $ constructArguments ;
4771 }
48-
49- private function getMockObject (string $ className , $ arguments )
50- {
51- return $ this ->prophesize ($ className )->reveal ();
52- }
5372}
0 commit comments