1

私は次の構成を持っています:

  1. xampp 1.7.7 からの PHP 5.3.8
  2. PHP ユニット 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 に答える