2011-03-01 133 views
2

PHPUnit的测试:的PHPUnit不会抛出异常

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.'); 

    } 

函数的方法调用

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; 
     } 
    } 

有人能给出提示,为什么PHPUnit的犯规捕获异常?

+0

对不起,不知道为什么$ this-> fixture-> installScript不能如你所期望的那样工作。错误报告是否打开?也许使用调试器:)或者在 - > installScript调用之前输入一些输出,并将其放入cmdPutScript中,以查看代码是否真正在那里工作。 ---我没有看到任何理由为什么phpunit会导致一个问题,所以我只需要猜测它是你的代码 – edorian 2011-03-02 08:38:03

+0

当我运行原始代码,它作为suposed和抛出异常。看起来由于某些原因,phpunit不执行installScript() – martins 2011-03-02 08:44:34

回答

3

使用一个调试器,并逐步通过测试用例,以确保您的代码实际上首先抛出Exception。从代码中不可能知道环境是否以导致异常的方式进行安装。


在旁注上,你应该抛出较少的泛型异常。您正在使用try/catch所以下面并不适用于手头的问题,但是请注意

实现GH-88:@ExpectedException(和setExpectedException())不再接受例外的预期异常类。

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

2

机会是问题出在你的代码,而不是使用PHPUnit的。

看到这个测试案例:

<?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"); 

    } 
} 

它打印:

phpunit mep.php 
PHPUnit 3.5.12 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 3.00Mb 

OK (1 test, 0 assertions) 

所以归结为它工作的要领。这将是非常奇怪的,如果phpunit会改变任何这种行为