Tester\TestCase::runTest PHP Method

runTest() public method

Runs the test method.
public runTest ( $method, array $args = NULL ) : void
$args array
return void
    public function runTest($method, array $args = NULL)
    {
        if (!method_exists($this, $method)) {
            throw new TestCaseException("Method '{$method}' does not exist.");
        } elseif (!preg_match(self::METHOD_PATTERN, $method)) {
            throw new TestCaseException("Method '{$method}' is not a testing method.");
        }
        $method = new \ReflectionMethod($this, $method);
        if (!$method->isPublic()) {
            throw new TestCaseException("Method {$method->getName()} is not public. Make it public or rename it.");
        }
        $info = Helpers::parseDocComment($method->getDocComment()) + ['dataprovider' => NULL, 'throws' => NULL];
        if ($info['throws'] === '') {
            throw new TestCaseException("Missing class name in @throws annotation for {$method->getName()}().");
        } elseif (is_array($info['throws'])) {
            throw new TestCaseException("Annotation @throws for {$method->getName()}() can be specified only once.");
        } else {
            $throws = preg_split('#\\s+#', $info['throws'], 2) + [NULL, NULL];
        }
        $data = [];
        if ($args === NULL) {
            $defaultParams = [];
            foreach ($method->getParameters() as $param) {
                $defaultParams[$param->getName()] = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : NULL;
            }
            foreach ((array) $info['dataprovider'] as $provider) {
                $res = $this->getData($provider);
                if (!is_array($res) && !$res instanceof \Traversable) {
                    throw new TestCaseException("Data provider {$provider}() doesn't return array or Traversable.");
                }
                foreach ($res as $set) {
                    $data[] = is_string(key($set)) ? array_merge($defaultParams, $set) : $set;
                }
            }
            if (!$info['dataprovider']) {
                if ($method->getNumberOfRequiredParameters()) {
                    throw new TestCaseException("Method {$method->getName()}() has arguments, but @dataProvider is missing.");
                }
                $data[] = [];
            }
        } else {
            $data[] = $args;
        }
        if ($this->prevErrorHandler === FALSE) {
            $this->prevErrorHandler = set_error_handler(function ($severity) {
                if ($this->handleErrors && ($severity & error_reporting()) === $severity) {
                    $this->handleErrors = FALSE;
                    $this->silentTearDown();
                }
                return $this->prevErrorHandler ? call_user_func_array($this->prevErrorHandler, func_get_args()) : FALSE;
            });
        }
        foreach ($data as $params) {
            try {
                $this->setUp();
                $this->handleErrors = TRUE;
                try {
                    if ($info['throws']) {
                        $e = Assert::error(function () use($method, $params) {
                            call_user_func_array([$this, $method->getName()], $params);
                        }, $throws[0], $throws[1]);
                        if ($e instanceof AssertException) {
                            throw $e;
                        }
                    } else {
                        call_user_func_array([$this, $method->getName()], $params);
                    }
                } catch (\Exception $e) {
                    $this->handleErrors = FALSE;
                    $this->silentTearDown();
                    throw $e;
                }
                $this->handleErrors = FALSE;
                $this->tearDown();
            } catch (AssertException $e) {
                throw $e->setMessage("{$e->origMessage} in {$method->getName()}(" . substr(Dumper::toLine($params), 1, -1) . ')');
            }
        }
    }

Usage Example

 /**
  * @inheritdoc
  */
 public function runTest($method, array $args = NULL)
 {
     try {
         $this->initializeModules($method);
         $this->lifeCycle->onInitialized();
         parent::runTest($method, $args);
         $this->lifeCycle->onSuccess();
     } catch (\Exception $e) {
         $this->lifeCycle->onException();
         throw $e;
     } finally {
         $this->lifeCycle->onFinally();
     }
 }
All Usage Examples Of Tester\TestCase::runTest