PHPUnit没有检测到缺少的参数

时间:2013-01-25 08:46:37

标签: php phpunit

我有以下配置:

  1. 来自xampp 1.7.7的PHP 5.3.8
  2. PHPUnit 3.7.13。
  3. 我在Windows XP上从命令行和Netbeans运行我的测试。 这是我的代码。

    class Wrapper
    {
        public function wrap($text, $maxLength) {
            if(strlen($text) > $maxLength)
                return substr($text, 0, $maxLength) . "\n" . substr($text, $maxLength);
            return $text;
        }
    }
    
    class WrapperTest extends PHPUnit_Framework_TestCase
    {
        protected $wrapper;
        protected function setUp() {
            $this->wrapper = new Wrapper;
        }
    
        public function testWrap() {
            $text = '';
            $this->assertEquals($text, $this->wrapper->wrap($text));
        }
    }
    

    问题是虽然该函数明显缺少参数,但测试仍然通过。使用Ubuntu时,测试按预期失败。

1 个答案:

答案 0 :(得分:1)

这是一种可捕获的错误类型。为了捕获错误,您可以创建自定义错误处理程序。见(http://php.net/manual/en/function.set-error-handler.php)。

为了抓住这个。您可以尝试以下方法。

class Wrapper
{
    public function wrap($text, $maxLength) {
        if(strlen($text) > $maxLength)
            return substr($text, 0, $maxLength) . "\n" . substr($text, $maxLength);
        return $text;
    }
}

class WrapperTest extends PHPUnit_Framework_TestCase
{
    protected $wrapper;

    protected function setUp()
    {
        set_error_handler(array($this, 'errorHandler'));
    }

    public function errorHandler($errno, $errstr, $errfile, $errline)
    {
        throw new \InvalidArgumentException(
            sprintf(
                'Missing argument. %s %s %s %s',
                $errno,
                $errstr,
                $errfile,
                $errline
            )
        );
    }

    public function testShouldThrowExceptionWhenTheresNoParamPassed()
    {
        $this->setExpectedException('\InvalidArgumentException');
        new Wrapper;
    }
}

希望有所帮助。