1

我有以下配置:

  1. 来自 xampp 1.7.7 的 PHP 5.3.8
  2. PHPUnit 3.7.13。

我正在从命令行和 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 时,测试按预期失败。

4

1 回答 1

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;
    }
}
于 2015-02-06T16:17:00.170 回答