Testing Unitils不';行不通

Testing Unitils不';行不通,testing,unitils,Testing,Unitils,我有个大问题 我的unitils.properties: database.driverClassName=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost/timesheet_test database.userName=root database.password= database.schemaNames=timesheet_test database.dialect=mysql updateDataBaseSchema.

我有个大问题

我的unitils.properties:

database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost/timesheet_test
database.userName=root
database.password=
database.schemaNames=timesheet_test
database.dialect=mysql

updateDataBaseSchema.enabled=true
dbMaintainer.script.locations=src/test/resources/dbscripts
dataSetStructureGenerator.xsd.dirName=target/xsd

dbMaintainer.autoCreateExecutedScriptsTable=true
dbMaintainer.disableConstraints.enabled=false

## Módulos do unitils
unitils.module.database.enabled=true
unitils.module.dbunit.enabled=true
unitils.module.hibernate.enabled=true
unitils.module.spring.enabled=true
unitils.module.mock.enabled=false
unitils.module.easymock.enabled=false
unitils.module.inject.enabled=false
unitils.module.jpa.enabled=false

DatabaseModule.Transactional.value.default=rollback
my database.sql:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `timesheet_test` DEFAULT CHARACTER SET latin1 ;
USE `timesheet_test` ;

-- -----------------------------------------------------
-- Table `timesheet_test`.`DATA`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `timesheet_test`.`DATA` (
  `ID_DATA` BIGINT(20) NOT NULL AUTO_INCREMENT ,
  `DATA` DATETIME NOT NULL ,
  PRIMARY KEY (`ID_DATA`) ,
  UNIQUE INDEX `data_UNIQUE` (`DATA` ASC) ,
  UNIQUE INDEX `ID_DIAS_UNIQUE` (`ID_DATA` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 1000
DEFAULT CHARACTER SET = latin1;


-- -----------------------------------------------------
-- Table `timesheet_test`.`USUARIO`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `timesheet_test`.`USUARIO` (
  `ID_USUARIO` BIGINT(20) NOT NULL AUTO_INCREMENT ,
  `E_MAIL` VARCHAR(100) NOT NULL ,
  `SENHA` VARCHAR(10) NOT NULL ,
  `NOME` VARCHAR(100) NULL DEFAULT NULL ,
  PRIMARY KEY (`ID_USUARIO`) ,
  UNIQUE INDEX `E_MAIL_UNIQUE` (`E_MAIL` ASC) ,
  UNIQUE INDEX `ID_USUARIO_UNIQUE` (`ID_USUARIO` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 1000
DEFAULT CHARACTER SET = latin1;


-- -----------------------------------------------------
-- Table `timesheet_test`.`TIME_SHEET`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `timesheet_test`.`TIME_SHEET` (
  `ID_TIME_SHEET` BIGINT(20) NOT NULL AUTO_INCREMENT ,
  `INICIO` VARCHAR(8) NOT NULL ,
  `FIM` VARCHAR(8) NOT NULL ,
  `LONGITUDE` DOUBLE NULL DEFAULT NULL ,
  `LATITUDE` DOUBLE NULL DEFAULT NULL ,
  `OBSERVACAO` VARCHAR(200) NULL DEFAULT NULL ,
  `ID_DATA` BIGINT(20) NOT NULL ,
  `ID_USUARIO` BIGINT(20) NOT NULL ,
  PRIMARY KEY (`ID_TIME_SHEET`) ,
  UNIQUE INDEX `ID_TIME_SHEET_UNIQUE` (`ID_TIME_SHEET` ASC) ,
  INDEX `FK9735054D39B29F66` (`ID_DATA` ASC) ,
  INDEX `FK9735054D9DA5550A` (`ID_USUARIO` ASC) ,
  CONSTRAINT `FK9735054D9DA5550A`
    FOREIGN KEY (`ID_USUARIO` )
    REFERENCES `timesheet_test`.`USUARIO` (`ID_USUARIO` ),
  CONSTRAINT `FK9735054D39B29F66`
    FOREIGN KEY (`ID_DATA` )
    REFERENCES `timesheet_test`.`DATA` (`ID_DATA` ))
ENGINE = InnoDB
AUTO_INCREMENT = 1000
DEFAULT CHARACTER SET = latin1;

USE `timesheet_test` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
我有65个测试,6个有问题,同样的错误:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`timesheet_test`.`time_sheet`, CONSTRAINT `FK9735054D39B29F66` FOREIGN KEY (`ID_DATA`) REFERENCES `DATA` (`ID_DATA`))
我的测试是“搜索”而不是“删除”,但我认为当unitils试图删除行以开始新的测试时,会出现问题

有人知道吗


谢谢

您可以在以下网站上找到解决方案:

在干净插入过程中,首先按照数据集中指定的相反顺序从所有表中删除数据。然后,按指定顺序插入数据。 因此,对于您的数据集
<TIME_SHEET /> <DATA /> <USUARIO />
它首先删除usuario中的所有记录,然后删除数据,然后删除时间表 由于从时间表到数据似乎存在FK(请参见例外),因此在删除相关时间表记录之前,它无法删除数据记录 解决方案:只需更正数据集中的顺序(将数据放在时间表之前) <DATA /> <TIME_SHEET /> <USUARIO />