2011-03-01 7 views
2

phpunit test:phpunit ne jette pas exception

public function testSizeOver64K() { 
     try { 
      $this->login(); 
      $scriptname = 'test script4'; 
      $this->fixture->installScript($scriptname, $this->scripts[$scriptname]); 
     } 
     catch (Exception $expected) { 
      return; 
     } 
     $this->fail('An expected exception has not been raised.'); 

    } 

Fonctions méthodes qu'il appelle

function installScript($scriptname, $script, $makeactive = false) 
    { 
     $this->cmdPutScript($scriptname, $script); 

     if ($makeactive) 
      $this->cmdSetActive($scriptname); 

     return true; 
    } 
private function cmdPutScript($scriptname, $scriptdata) 
    { 
     if (self::STATE_TRANSACTION != $this->state) { 
      $msg = 'Not currently in TRANSACTION state'; 
      $code = 1; 
      throw new Exception($msg, $code); 
     } 

     $stringLength = $this->getLineLength($scriptdata); 

     $this->doCmd(sprintf("PUTSCRIPT \"%s\" {%d+}\r\n%s", $scriptname, $stringLength, $scriptdata)); 

     return true; 
    } 
private function getLineLength($string) { 
     if (extension_loaded('mbstring') || @dl(PHP_SHLIB_PREFIX.'mbstring.'.PHP_SHLIB_SUFFIX)) { 
      $lenght = mb_strlen($string,'8bit'); 
      if ($lenght > 65536) { 
       $msg = "Script is over 64K"; 
       throw new Exception($msg); 
      } 
      return $lenght; 
     } else { 
      $lenght = strlen($string); 
      if ($lenght > 65536) { 
       $msg = "Script is over 64K"; 
       throw new Exception($msg); 
      } 
      return $lenght; 
     } 
    } 

Quelqu'un peut-il donner des conseils pourquoi phpunit ne marche pas Intercepter l'exception?

+0

Désolé, aucune raison pour laquelle $ this-> fixture-> installScript ne fonctionne pas comme prévu. Le rapport d'erreurs est-il activé? Peut-être utiliser un débogueur :) ou mettre une sortie avant l'appel -> installScript et dans cmdPutScript pour voir si votre code fonctionne réellement là. --- Je ne vois pas pourquoi phpunit causerait un problème là-bas, je dois juste deviner que c'est votre code – edorian

+0

quand je lance le code original, il fonctionne comme prévu et émet une exception. Il semble que phpunit n'exécute pas installScript() pour certaines raisons – martins

Répondre

3

Utilisez un débogueur et parcourez le test pour vous assurer que votre code lève réellement l'exception en premier lieu. Il est impossible de dire à partir de votre code si l'environnement est configuré d'une manière qui entraînerait une exception.


Sur une note, vous êtes censé jeter des exceptions moins génériques. Vous utilisez try/catch donc ce qui suit est pas applicable à votre problème à portée de main, mais prenez note de

Mis en œuvre GH-88: @expectedException (et setExpectedException()) ne plus accepter que la classe Exception d'exception prévue.

Voir changelog for PHPUnit 3.6 et https://github.com/sebastianbergmann/phpunit/pull/88

2

Il y a des chances que le problème est dans votre code et n'est pas avec PHPUnit du tout.

Voir ce cas de test:

<?php 

function foo() { 
    throw new Exception("boom"); 
} 
class MyFooTest extends PHPUnit_Framework_TestCase { 

    public function testArguments() { 
     try { 
      foo(); 
     } catch (Exception $e) { 
      return; 
     } 
     $this->fail("nope"); 

    } 
} 

il imprime:

phpunit mep.php 
PHPUnit 3.5.12 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 3.00Mb 

OK (1 test, 0 assertions) 

donc bouilli à l'essentiel, il fonctionne. Il serait assez étrange que phpunit change un de ces comportements

Questions connexes