Hallo an alle, ich hab ein kleines Problem beim Testen mit Junit. Ich habe eine Klasse R2D2 und erzeuge 3 verschiedene davon. bei jedem erstellen soll di ID-Nummer von anfangend von 0 um 1 erhöht werden.
Wenn ich in einer Main über syso getId() die ID von jedem Roboter abfrage kommt beim ersten ganz normal 0 beim zweiten 1 beim dritten 2 und wenn ich dann die Namen mit getName() abfrage ändert sich bei den ID's auch nichts. So soll es auch sein. Jetzt wollte ich das ganze über Junit testen und wenn ich allein die Testmethode für ID ausführe ist auch alles richtig also auch wieder 0, 1, 2. Aber sobald ich die Namen teste, hat der erste Roboter auf einmal anstatt die ID 0, die ID 3. Dann gibt es noch das Problem wenn ich die ID's einzeln abfrage kommt beim Junit Test beim ersten R2D2 noch die 0 aber beim zweiten die 4 und beim dritten die 8.Kann es sein das durch den Junit Test irgendwie noch ein Objekt im Hintergrund erzeugt wird und somit die statische Variable buildCounter irgendwie nochmal erhöht wird?
Hier ist die Junit-Testklasse ohne Testabfrage von Namen und einzelne Abfrage der ID's(test1 hat 0 aber test2 hat 4 anstatt 1 und test3 hat 8 anstatt 2):
Hier ist die Junit-Testklasse ohne Testabfrage von Namen(alles normal die ID's haben 0,1,2):
Und hier ist die Junit-Testklasse mit Testabfrage von Namen(ID von Test1 hat anstatt 0 die 3):
Ich hoffe ich hab mich nicht zu unklar ausgedrückt und man versteht was ich meine, falls jemand denkt da fehlt doch noch was an Klassen. Ja stimmt allerdings denke ich es betrifft speziell die R2D2-Klasse wegen der statischen Variablen buildCounter.
Wenn ich in einer Main über syso getId() die ID von jedem Roboter abfrage kommt beim ersten ganz normal 0 beim zweiten 1 beim dritten 2 und wenn ich dann die Namen mit getName() abfrage ändert sich bei den ID's auch nichts. So soll es auch sein. Jetzt wollte ich das ganze über Junit testen und wenn ich allein die Testmethode für ID ausführe ist auch alles richtig also auch wieder 0, 1, 2. Aber sobald ich die Namen teste, hat der erste Roboter auf einmal anstatt die ID 0, die ID 3. Dann gibt es noch das Problem wenn ich die ID's einzeln abfrage kommt beim Junit Test beim ersten R2D2 noch die 0 aber beim zweiten die 4 und beim dritten die 8.Kann es sein das durch den Junit Test irgendwie noch ein Objekt im Hintergrund erzeugt wird und somit die statische Variable buildCounter irgendwie nochmal erhöht wird?
Java:
public class R2D2 extends RobotModel {
private static final int MIN_ID_R2D2 = 0;
private static final int MAX_ID_R2D2 = 9999;
private static int buildCounter = MIN_ID_R2D2;
public R2D2(String name) {
this.name = name;
checkRobotId();
this.id = R2D2.buildCounter;
R2D2.buildCounter++;
}
protected void checkRobotId() {
if (R2D2.buildCounter > MAX_ID_R2D2) {
R2D2.buildCounter = MIN_ID_R2D2;
}
}
}
Hier ist die Junit-Testklasse ohne Testabfrage von Namen und einzelne Abfrage der ID's(test1 hat 0 aber test2 hat 4 anstatt 1 und test3 hat 8 anstatt 2):
Java:
public class TestR2D2 {
// R2D2 Roboter erstellen
Robot test1 = RobotFactory.createRobot(RobotType.R2D2, "Bernd");
Robot test2 = RobotFactory.createRobot(RobotType.R2D2, "Achim");
Robot test3 = RobotFactory.createRobot(RobotType.R2D2, "Klaus");
@Test
public void test1() {
assertEquals(0, test1.getId());
}
@Test
public void test2() {
assertEquals(1, test2.getId());
}
@Test
public void test3() {
assertEquals(2, test3.getId());
}
}
Hier ist die Junit-Testklasse ohne Testabfrage von Namen(alles normal die ID's haben 0,1,2):
Java:
public class TestR2D2 {
// R2D2 Roboter erstellen
Robot test1 = RobotFactory.createRobot(RobotType.R2D2, "Bernd");
Robot test2 = RobotFactory.createRobot(RobotType.R2D2, "Achim");
Robot test3 = RobotFactory.createRobot(RobotType.R2D2, "Klaus");
@Test
public void testId() {
assertEquals(0, test1.getId());
assertEquals(1, test2.getId());
assertEquals(2, test3.getId());
}
}
Und hier ist die Junit-Testklasse mit Testabfrage von Namen(ID von Test1 hat anstatt 0 die 3):
Java:
public class TestR2D2 {
// R2D2 Roboter erstellen
Robot test1 = RobotFactory.createRobot(RobotType.R2D2, "Bernd");
Robot test2 = RobotFactory.createRobot(RobotType.R2D2, "Achim");
Robot test3 = RobotFactory.createRobot(RobotType.R2D2, "Klaus");
@Test
public void testId() {
assertEquals(0, test1.getId());
assertEquals(1, test2.getId());
assertEquals(2, test3.getId());
}
@Test
public void testName() {
assertEquals(0, test1.getName());
assertEquals(1, test2.getName());
assertEquals(2, test3.getName());
}
}
Ich hoffe ich hab mich nicht zu unklar ausgedrückt und man versteht was ich meine, falls jemand denkt da fehlt doch noch was an Klassen. Ja stimmt allerdings denke ich es betrifft speziell die R2D2-Klasse wegen der statischen Variablen buildCounter.
Zuletzt bearbeitet: