PHPUnit testing

Ярослав

Новичок
PHPUnit testing

Посмотрел сорцы тестинга для Zend Framework
там следующее

PHP:
/**
     * Ensure that exceptions are caught
     *
     */
    public function testCatchExceptionNoIdentity()
    {
        try {
            $result = $this->_adapter->authenticate();
            $this->fail('Exception should have been thrown');
        } catch (Zend_Auth_Exception $e) {
            $this->assertEquals($e->getMessage(), 
                'A value for the identity was not provided prior to authentication with Zend_Auth_Adapter_DbTable.');
        }
    }

Но если кто нибудь изменит сообщение ошибки то тест провалится
Не лучше в данном случае использовать коды ошибок?

Должна быть отдельная база, табла для тестинга уже готовая или создавать в тесте?
Вот как тут делают зендовцы:
PHP:
/**
     * Set up test configuration
     *
     * @return void
     */
    public function setUp()
    {
        $this->_db = new Zend_Db_Adapter_Pdo_Sqlite(
            array('dbname' => TESTS_ZEND_AUTH_ADAPTER_DBTABLE_PDO_SQLITE_DATABASE)
            );

        $sqlCreate = 'CREATE TABLE [users] ( '
                   . '[id] INTEGER  NOT NULL PRIMARY KEY, '
                   . '[username] VARCHAR(50) NOT NULL, '
                   . '[password] VARCHAR(32) NULL, '
                   . '[real_name] VARCHAR(150) NULL)';
        $this->_db->query($sqlCreate);

        $sqlInsert = 'INSERT INTO users (username, password, real_name) '
                   . 'VALUES ("my_username", "my_password", "My Real Name")';
        $this->_db->query($sqlInsert);

        $this->_adapter = new Zend_Auth_Adapter_DbTable($this->_db, 'users', 'username', 'password');
    }
На сколько это корректно?
Ссылаюсь на код зенда, т.к. считаю его одним из лучших php фреймворков.
 
Сообщения об ошибках как правило не меняются или крайне редко, тест подправить не проблема, а коды ошибок - это сущий гемор. Ошибка должна быть четкой и понятной.
 
kvf77, Ярослав
И все же, имхо, проверять сообщение об ошибке в тестовом методе - это может быть (подчеркну - _может_быть_) не совсем корректно. Более корректный подход - выбрасывать специально выделенный для случая класс исключения. Однако, зенд-фреймворк и так порядочно захламлен тучей классов - так что, как говорится, it depends.

насчет же создания таблицы в setUp() (и, надо полагать, уничтожении ее при tearDown()) - нормальный, хороший подход.
 
Меня тоже волнует почему в PHPUnit нет встроенной проверки на масягу эксепшена. Чуствую что не спроста. А с другой стороны плодить эксепшены на каждую ситуацию тоже как то не хорошо.

Я столкнулся с некоторыми проблемами при тестировании эксепшенов. Допустим есть вполне себе конкретный набор классов Request. Есть CommonRequest, который определяет базовую структуру запроса и выбрасывает некоторые исключения. Конкретные запросы от него наследуются и тоже выбрасывают исключения того же класса (вроде смысла делать новый класс исключения нет?). Бывает иногда ошибешься с фикстурой в тесте конкретного запроса и получаешь исключение от базового класса там, где должно быть исключение тестируемого. Это если делать удобное @expectedException без проверки сообщения. Получаем ложное срабатывание теста.

Кто как в подобных ситуациях поступает?

-~{}~ 07.04.08 11:31:

up
 
Автор оригинала: whirlwind
...
Кто как в подобных ситуациях поступает?
Я бы написал свой метод exceptExceptionFrom($class_name) или поменял бы стандартный. В общем, ИМХО, если надо получить exception от определенного класса, то нет смысла пытаться сделать это окольными путями (через сообщение). А кто бросает исключение можно узнать из трейса.
 
Сверху