phpunit не выбрасывает исключение - PullRequest
2 голосов
/ 01 марта 2011

тест 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 не перехватывает исключение?

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Используйте отладчик и пройдитесь по тестовому сценарию, чтобы убедиться, что ваш код на самом деле создает исключение. По вашему коду невозможно определить, настроена ли среда таким образом, что это приведет к исключению.


В sidenote вы должны выдавать меньше общих исключений. Вы используете try/catch, поэтому следующее не относится к вашей проблеме, но обратите внимание на

Реализован GH-88: @expectedException (и setExpectedException ()) больше не принимают Exception в качестве ожидаемого класса исключений.

См. список изменений для PHPUnit 3.6 и https://github.com/sebastianbergmann/phpunit/pull/88

2 голосов
/ 01 марта 2011

Скорее всего, проблема в вашем коде, а вовсе не в 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 изменил бы это поведение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...