44
55use PHPUnit_Framework_MockObject_Generator ;
66use PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount ;
7- use PHPUnit_Framework_MockObject_MockObject ;
7+ use PHPUnit_Framework_MockObject_MockObject as MockObject ;
88
99/**
1010 * Generates mock objects.
@@ -19,23 +19,18 @@ class EasyMock
1919 * Methods not specified in $methods will be mocked to return null (default PHPUnit behavior).
2020 * The class constructor will *not* be called.
2121 *
22- * @param string $classname The class to mock.
22+ * @param string $classname The class to mock. Can also be an existing mock to mock new methods.
2323 * @param array $methods Array of values to return, indexed by the method name.
2424 *
25- * @return PHPUnit_Framework_MockObject_MockObject
25+ * @return \ PHPUnit_Framework_MockObject_MockObject
2626 */
2727 public static function mock ($ classname , array $ methods = array ())
2828 {
29- $ mockGenerator = new PHPUnit_Framework_MockObject_Generator ();
30-
31- /** @var PHPUnit_Framework_MockObject_MockObject $mock */
32- $ mock = $ mockGenerator ->getMock (
33- $ classname ,
34- array (),
35- array (),
36- '' ,
37- false
38- );
29+ if ($ classname instanceof MockObject) {
30+ $ mock = $ classname ;
31+ } else {
32+ $ mock = self ::createMock ($ classname );
33+ }
3934
4035 foreach ($ methods as $ method => $ return ) {
4136 self ::mockMethod ($ mock , $ method , $ return );
@@ -44,7 +39,7 @@ public static function mock($classname, array $methods = array())
4439 return $ mock ;
4540 }
4641
47- private static function mockMethod (PHPUnit_Framework_MockObject_MockObject $ mock , $ method , $ return )
42+ private static function mockMethod (MockObject $ mock , $ method , $ return )
4843 {
4944 $ methodAssertion = $ mock ->expects (new PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount )
5045 ->method ($ method );
@@ -57,4 +52,21 @@ private static function mockMethod(PHPUnit_Framework_MockObject_MockObject $mock
5752 $ methodAssertion ->willReturn ($ return );
5853 }
5954 }
55+
56+ /**
57+ * @param string $classname
58+ * @return MockObject
59+ */
60+ private static function createMock ($ classname )
61+ {
62+ $ mockGenerator = new PHPUnit_Framework_MockObject_Generator ();
63+
64+ return $ mockGenerator ->getMock (
65+ $ classname ,
66+ array (),
67+ array (),
68+ '' ,
69+ false
70+ );
71+ }
6072}
0 commit comments