[FEATURE] Mocking of concrete methods in abstract classes 30/45130/2
authorStefan Rotsch <stefan.rotsch@aoe.com>
Fri, 4 Dec 2015 14:40:13 +0000 (15:40 +0100)
committerHelmut Hummel <helmut.hummel@typo3.org>
Sun, 13 Dec 2015 13:44:22 +0000 (14:44 +0100)
Allows mocking of concrete methods when testing protected functions
in abstract classes.

Introduces a new parameter which will be passed to the corresponding
PHPUnit method when creating a mock object of an abstract class.

Change-Id: I9cbe510633300184666c6204a4d0c5be7d417ef4
Resolves: #72062
Releases: master
Reviewed-on: https://review.typo3.org/45130
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Daniel Goerz <ervaude@gmail.com>
Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org>
Tested-by: Helmut Hummel <helmut.hummel@typo3.org>
typo3/sysext/core/Tests/BaseTestCase.php

index 4f13673..e7e1d09 100644 (file)
@@ -76,7 +76,8 @@ abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
 
     /**
      * Returns a mock object which allows for calling protected methods and access
-     * of protected properties.
+     * of protected properties. Concrete methods to mock can be specified with
+     * the last parameter
      *
      * @param string $originalClassName Full qualified name of the original class
      * @param array $arguments
@@ -84,6 +85,7 @@ abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
      * @param bool $callOriginalConstructor
      * @param bool $callOriginalClone
      * @param bool $callAutoload
+     * @param array $mockedMethods
      *
      * @throws \InvalidArgumentException
      *
@@ -92,7 +94,7 @@ abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
      */
     protected function getAccessibleMockForAbstractClass(
         $originalClassName, array $arguments = array(), $mockClassName = '',
-        $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true
+        $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $mockedMethods = array()
     ) {
         if ($originalClassName === '') {
             throw new \InvalidArgumentException('$originalClassName must not be empty.', 1384268260);
@@ -104,7 +106,8 @@ abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
             $mockClassName,
             $callOriginalConstructor,
             $callOriginalClone,
-            $callAutoload
+            $callAutoload,
+            $mockedMethods
         );
     }