Ich habe eine Entität, die eine MySQL-Spalte als auto_increment definiert hatZurücksetzen AUTO_INCREMENT vor jedem Arquillian Test
@Column(columnDefinition = "integer auto_increment")
private int entityNumber;
Ich habe auch einen Arquillian-Test, in dem ich die Erstellung und Löschung dieser Einheit testen. Die Testklasse wird mit kommentierten
@UsingDataSet("datasets/empty.xml")
Im folgenden Code ich erklären, was passiert ist, und die Fehler, die ich
bekommen@Test
public void createEntityTest1() {
Entity entity1 = persistEntity();
assertEquals(1, entity1.entityNumber); // works perfectly
}
@Test
public void createEntityTest2() {
Entity entity2 = persistEntity();
assertEquals(1, entity2.entityNumber);
// fails! Since I am in a new test I expect the new entityNumber to be 1
// but it is actually 2 because entity2 was previously created in
// createEntityTest1, although the entity itself doens't exist anymore
//in the DB
}
Das Problem ist, dass der auto_increment Index nicht nach jedem Test, wird zurückgesetzt, so dass es für alle meine Tests zunimmt und wenn ich es überprüfen möchte, sind die automatisch generierten Zahlen größer als erwartet.
Gibt es eine Möglichkeit, diesen Wert nach jedem Test zurückzusetzen?
BEARBEITEN
Das SQL-Schema meiner Tabelle. Es ist wirklich leicht gefallen
CREATE TABLE `entity` (
`id` varchar(36) NOT NULL
`version` bigint(20) NOT NULL,
`entity_number` int(11) NOT NULL AUTO_INCREMENT
PRIMARY KEY (`id`),
UNIQUE KEY `UK_entity_number` (`entity_number`),
KEY `IX_entity_entity_number` (`entity_number`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Überprüfen Sie meine Antwort [hier] (http://StackOverflow.com/a/37684606) ... tldr: Sie können in Lücken keilen, oder Sie können es höher setzen. Ansonsten trunkiere und füge zurück zu 1 für die nächste erste. Beachten Sie, dass bei innodb- und kaskadierten Löschvorgängen die Datenbank selbst die Eltern-/Kind-FK-Abhängigkeiten bereinigen kann, wenn dies beim Lesen Ihrer Frage ein Problem ist. Bereinigen Sie die Bedeutung "nicht verwaiste" untergeordnete Zeilen. – Drew
Es scheint eine Möglichkeit zu sein, dies zu tun, aber ich wollte nicht direkt mit mysql-Sätzen in Verbindung treten. Ich habe mich gefragt, ob es einen "arquillianischen Weg" gibt, um das zu tun ... – iberbeu
Sie haben nicht einmal ein Schema hier, um zu wissen, was die Frage/Herausforderung ist. – Drew