#zend-framework #phpunit
#zend-framework #phpunit
Вопрос:
В основном мой тест не удался из-за «Нарушения целостности» при попытке УСЕЧЬ таблицы в неправильном порядке.
Каждый тестовый пример Db расширяет PHPUnit_DatabaseTestCase_Abstract, который усекает таблицы перед тестированием. Как только у меня появляется строка в свойстве, все тесты завершаются неудачей из-за ошибки: сбой СОСТАВНОЙ операции [УСЕЧЕНИЯ] при запросе.
Это моя схема базы данных:
-- -----------------------------------------------------
-- Table `project`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `project` (
`project_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`project_id`) ,
UNIQUE INDEX `project_id_UNIQUE` (`project_id` ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `customer`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `customer` (
`customer_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`firstname` VARCHAR(45) NOT NULL ,
`lastname` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`telephone` VARCHAR(45) NULL DEFAULT NULL ,
PRIMARY KEY (`customer_id`) ,
UNIQUE INDEX `customer_id_UNIQUE` (`customer_id` ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `property`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `property` (
`property_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`project_id` INT UNSIGNED NOT NULL ,
`customer_id` INT UNSIGNED NULL DEFAULT NULL ,
`name` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`property_id`) ,
UNIQUE INDEX `property_id_UNIQUE` (`property_id` ASC) ,
INDEX `fk_property_project` (`project_id` ASC) ,
INDEX `fk_property_customer1` (`customer_id` ASC) ,
CONSTRAINT `fk_property_project`
FOREIGN KEY (`project_id` )
REFERENCES `project` (`project_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_property_customer1`
FOREIGN KEY (`customer_id` )
REFERENCES `customer` (`customer_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Я неправильно тестирую? Как я мог бы указать усечение в правильном порядке перед тестированием?
Версия Zend 1.11.5
Ошибка должна быть исправлена (проверьте форум zend framework
Ответ №1:
Если вы хотите использовать phpunit для тестирования своей базы данных, я думаю, было бы лучше расширить и использовать для этого класс ZF: Zend_Test_PHPUnit_DatabaseTestCase вместо прямого расширения PHPUnit_DatabaseTestCase_Abstract. Возможно, это часть вашей проблемы.
Комментарии:
1. Привет, Марчин, спасибо за ответ. Мои тестовые примеры базы данных расширяют PHPUnit_DatabaseTestCase_Abstract, потому что это персональный класс, который расширяет Zend_Test_PHPUnit_DatabaseTestCase.