setCodeCoverage() 공개 메소드

Sets the code coverage object.
public setCodeCoverage ( SebastianBergmann\CodeCoverage\CodeCoverage $codeCoverage )
$codeCoverage SebastianBergmann\CodeCoverage\CodeCoverage
 public function testThatAfterSuiteRespectsRemoteFalseSetting()
 {
     $reflection = new ReflectionClass('Codeception\\Subscriber\\RemoteCodeCoverage');
     $settingsProperty = $reflection->getProperty('settings');
     $settingsProperty->setAccessible(true);
     /** @var $codeCoverageMock \Codeception\Subscriber\RemoteCodeCoverage|PHPUnit_Framework_MockObject_MockObject */
     $codeCoverageMock = $this->getMockBuilder('Codeception\\Subscriber\\RemoteCodeCoverage')->disableOriginalConstructor()->setMethods(array('getRemoteConnectionModule'))->getMock();
     $settingsProperty->setValue($codeCoverageMock, array('enabled' => true, 'remote' => false));
     /** @var $testSuite PHPUnit_Framework_TestSuite|PHPUnit_Framework_MockObject_MockObject */
     $testSuite = $this->getMock('PHPUnit_Framework_TestSuite', array(), array(), '', false);
     $testResult = new PHPUnit_Framework_TestResult();
     $testResult->setCodeCoverage(new \PHP_CodeCoverage());
     $suiteEvent = new Suite($testSuite, $testResult);
     $codeCoverageMock->beforeSuite($suiteEvent);
 }
예제 #2
0
 /**
  * Run a test
  */
 public function run(PHPUnit_Framework_TestSuite $suite)
 {
     $res = new PHPUnit_Framework_TestResult();
     if ($this->codecoverage) {
         $whitelist = CoverageMerger::getWhiteList($this->project);
         $this->codecoverage->filter()->addFilesToWhiteList($whitelist);
         $res->setCodeCoverage($this->codecoverage);
     }
     $res->addListener($this);
     foreach ($this->formatters as $formatter) {
         $res->addListener($formatter);
     }
     /* Set PHPUnit error handler */
     if ($this->useCustomErrorHandler) {
         $oldErrorHandler = set_error_handler(array($this, 'handleError'), E_ALL | E_STRICT);
     }
     $suite->run($res, false, $this->groups, $this->excludeGroups, $this->processIsolation);
     foreach ($this->formatters as $formatter) {
         $formatter->processResult($res);
     }
     /* Restore Phing error handler */
     if ($this->useCustomErrorHandler) {
         restore_error_handler();
     }
     if ($this->codecoverage) {
         CoverageMerger::merge($this->project, $this->codecoverage->getData());
     }
     if ($res->errorCount() != 0) {
         $this->retCode = self::ERRORS;
     } else {
         if ($res->failureCount() != 0) {
             $this->retCode = self::FAILURES;
         } else {
             if ($res->notImplementedCount() != 0) {
                 $this->retCode = self::INCOMPLETES;
             } else {
                 if ($res->skippedCount() != 0) {
                     $this->retCode = self::SKIPPED;
                 }
             }
         }
     }
 }
 /**
  * Run a test
  *
  * @param PHPUnit_Framework_TestSuite $suite
  */
 public function run(PHPUnit_Framework_TestSuite $suite)
 {
     $res = new PHPUnit_Framework_TestResult();
     if ($this->codecoverage) {
         $whitelist = CoverageMerger::getWhiteList($this->project);
         $this->codecoverage->filter()->addFilesToWhiteList($whitelist);
         $res->setCodeCoverage($this->codecoverage);
     }
     $res->addListener($this);
     foreach ($this->formatters as $formatter) {
         $res->addListener($formatter);
     }
     /* Set PHPUnit error handler */
     if ($this->useCustomErrorHandler) {
         $oldErrorHandler = set_error_handler(array($this, 'handleError'), E_ALL | E_STRICT);
     }
     $version = PHPUnit_Runner_Version::id();
     if (version_compare($version, '4.0.0') >= 0) {
         $this->injectFilters($suite);
         $suite->run($res);
     } else {
         $suite->run($res, false, $this->groups, $this->excludeGroups, $this->processIsolation);
     }
     foreach ($this->formatters as $formatter) {
         $formatter->processResult($res);
     }
     /* Restore Phing error handler */
     if ($this->useCustomErrorHandler) {
         restore_error_handler();
     }
     if ($this->codecoverage) {
         CoverageMerger::merge($this->project, $this->codecoverage->getData());
     }
     $this->checkResult($res);
 }
예제 #4
0
 public function applyFilter(\PHPUnit_Framework_TestResult $result)
 {
     $result->setCodeCoverage(new DummyCodeCoverage());
     Filter::setup($this->coverage)->whiteList($this->filters)->blackList($this->filters);
     $result->setCodeCoverage($this->coverage);
 }
 /**
  * 
  * Somewhat messy and god-method, but this override exists because
  * 
  * a) we want to change the configuration of items from the user-set TESTING_CONFIG 
  * variable if it exists
  * 
  * b) PhpUnitWrapper is referenced with explicit class settings, rather than allowing us to 
  * override as we like (to change code coverage behaviour). 
  * 
  * @global type TESTING_CONFIG
  * @global type $TESTING_CONFIG
  * @global type $databaseConfig
  * @param type $classList
  * @param type $coverage
  * @throws Exception
  */
 function runTests($classList, $coverage = false)
 {
     global $TESTING_CONFIG;
     $startTime = microtime(true);
     Config::inst()->update('Director', 'environment_type', 'dev');
     if (isset($TESTING_CONFIG['database']) && $TESTING_CONFIG['database'] != 'silverstripe_testing') {
         if (class_exists("Multisites")) {
             Multisites::inst()->resetCurrentSite();
         }
         global $databaseConfig;
         $newConfig = $databaseConfig;
         $newConfig = array_merge($databaseConfig, $TESTING_CONFIG);
         $newConfig['memory'] = isset($TESTING_CONFIG['memory']) ? $TESTING_CONFIG['memory'] : true;
         $newDbName = $TESTING_CONFIG['database'];
         $type = isset($newConfig['type']) ? $newConfig['type'] : 'MySQL';
         Debug::message("Connecting to new {$type} database {$TESTING_CONFIG['database']} as defined by testing config");
         DB::connect($newConfig);
         if (!DB::getConn()->databaseExists($newDbName)) {
             DB::getConn()->createDatabase($newDbName);
         }
         if (!DB::getConn()->selectDatabase($newDbName)) {
             throw new Exception("Could not find database to use for testing");
         }
         if ($newConfig['memory']) {
             Debug::message("Using in memory database");
         }
         $dbadmin = new DatabaseAdmin();
         if (isset($_REQUEST['clear']) && $_REQUEST['clear'] == 0) {
         } else {
             $dbadmin->clearAllData();
         }
         if (!(isset($_REQUEST['build']) && $_REQUEST['build'] == 0)) {
             Debug::message("Executing dev/build as requested");
             $dbadmin->doBuild(true);
         }
     }
     // XDEBUG seem to cause problems with test execution :-(
     if (function_exists('xdebug_disable')) {
         xdebug_disable();
     }
     ini_set('max_execution_time', 0);
     $this->setUp();
     // Optionally skip certain tests
     $skipTests = array();
     if ($this->request->getVar('SkipTests')) {
         $skipTests = explode(',', $this->request->getVar('SkipTests'));
     }
     $abstractClasses = array();
     foreach ($classList as $className) {
         // Ensure that the autoloader pulls in the test class, as PHPUnit won't know how to do this.
         class_exists($className);
         $reflection = new ReflectionClass($className);
         if ($reflection->isAbstract()) {
             array_push($abstractClasses, $className);
         }
     }
     $classList = array_diff($classList, $skipTests);
     // run tests before outputting anything to the client
     $suite = new PHPUnit_Framework_TestSuite();
     natcasesort($classList);
     foreach ($classList as $className) {
         // Ensure that the autoloader pulls in the test class, as PHPUnit won't know how to do this.
         class_exists($className);
         $suite->addTest(new SapphireTestSuite($className));
     }
     // Remove the error handler so that PHPUnit can add its own
     restore_error_handler();
     // CUSTOMISATION
     if (Director::is_cli()) {
         if ($reporterClass = $this->request->requestVar('reporter')) {
             $clazz = $reporterClass;
         } else {
             if (isset($TESTING_CONFIG['reporter'])) {
                 $clazz = $TESTING_CONFIG['reporter'];
             } else {
                 $clazz = "CliTestReporter";
             }
         }
     } else {
         $clazz = "SapphireTestReporter";
     }
     // END CUSTOMISATION
     // CUSTOMISATION
     $outputFile = null;
     if ($TESTING_CONFIG['logfile']) {
         $outputFile = BASE_PATH . '/' . $TESTING_CONFIG['logfile'];
     }
     $reporter = new $clazz($outputFile);
     $default = self::$default_reporter;
     self::$default_reporter->writeHeader("Sapphire Test Runner");
     if (count($classList) > 1) {
         self::$default_reporter->writeInfo("All Tests", "Running test cases: " . implode(",", $classList));
     } else {
         self::$default_reporter->writeInfo($classList[0], "");
     }
     $results = new PHPUnit_Framework_TestResult();
     $results->addListener($reporter);
     if ($coverage === true) {
         $coverer = $this->getCodeCoverage();
         $results->setCodeCoverage($coverer);
         $suite->run($results);
         $writer = new PHP_CodeCoverage_Report_HTML();
         $writer->process($coverer, Director::baseFolder() . '/ssautesting/html/code-coverage-report');
     } else {
         $suite->run($results);
     }
     if (!Director::is_cli()) {
         echo '<div class="trace">';
     }
     if (method_exists($reporter, 'writeResults')) {
         $reporter->writeResults($outputFile);
     } else {
         $reporter->flush();
     }
     // END CUSTOMISATION
     $endTime = microtime(true);
     if (Director::is_cli()) {
         echo "\n\nTotal time: " . round($endTime - $startTime, 3) . " seconds\n";
     } else {
         echo "<p>Total time: " . round($endTime - $startTime, 3) . " seconds</p>\n";
     }
     if (!Director::is_cli()) {
         echo '</div>';
     }
     // Put the error handlers back
     Debug::loadErrorHandlers();
     if (!Director::is_cli()) {
         self::$default_reporter->writeFooter();
     }
     $this->tearDown();
     // Todo: we should figure out how to pass this data back through Director more cleanly
     if (Director::is_cli() && $results->failureCount() + $results->errorCount() > 0) {
         exit(2);
     }
 }