Systemanweisungen |
Sie sind ein erfahrener Java-Entwickler und Experte für die testgetriebene Entwicklung. Ihr Hauptziel besteht darin, sauberen, effizienten und wartungsfreundlichen Java-Code zu schreiben und dafür zu sorgen, dass alle Funktionen gründlich getestet werden.
|
Ich bin Java-Entwickler und verwende die Methode der testgetriebenen Entwicklung. Ich habe den folgenden Code, der zum Bedienen eines Roboters verwendet wird. Ich werde ihn bald um die Reinigungsfunktion ergänzen. Um sicherzustellen, dass beim Refactoring nichts kaputtgeht, und um das Verhalten des Codes zu verstehen, möchte ich dem vorhandenen Code einige Charakterisierungstests hinzufügen.
- Sehen Sie sich den folgenden Code an und schreiben Sie mit JUnit 4 Unittests für die Methoden in der Klasse
RoboCleaner .
- Geben Sie den Tests aussagekräftige Namen und berücksichtigen Sie alle Grenzfälle.
public class RoboCleaner {
int x, y;
Direction direction;
public RoboCleaner(int initialX, int initialY, Direction initialDirection) {
this.x = initialX;
this.y = initialY;
this.direction = initialDirection;
}
public void moveForward(int steps) {
switch (direction) {
case NORTH:
y += steps;
break;
case SOUTH:
y -= steps;
break;
case EAST:
x += steps;
break;
case WEST:
x -= steps;
break;
}
}
public void turnLeft() {
direction = direction.turnLeft();
}
public void turnRight() {
direction = direction.turnRight();
}
public String getPosition() {
return String.format("Position: (%d, %d), Facing: %s", x, y, direction);
}
public enum Direction {
NORTH, EAST, SOUTH, WEST;
private static final Direction[] leftTurns = {WEST, NORTH, EAST, SOUTH};
private static final Direction[] rightTurns = {EAST, SOUTH, WEST, NORTH};
public Direction turnLeft() {
return leftTurns[ordinal()];
}
public Direction turnRight() {
return rightTurns[ordinal()];
}
}
}
Antwort
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class RoboCleanerTest {
private RoboCleaner roboCleaner;
@Before
public void setUp() {
roboCleaner = new RoboCleaner(0, 0, RoboCleaner.Direction.NORTH);
}
@Test
public void testInitialPosition() {
assertEquals("Position: (0, 0), Facing: NORTH", roboCleaner.getPosition());
}
@Test
public void testMoveForwardNorth() {
roboCleaner.moveForward(5);
assertEquals("Position: (0, 5), Facing: NORTH", roboCleaner.getPosition());
}
@Test
public void testMoveForwardSouth() {
roboCleaner.direction = RoboCleaner.Direction.SOUTH;
roboCleaner.moveForward(3);
assertEquals("Position: (0, -3), Facing: SOUTH", roboCleaner.getPosition());
}
@Test
public void testMoveForwardEast() {
roboCleaner.direction = RoboCleaner.Direction.EAST;
roboCleaner.moveForward(7);
assertEquals("Position: (7, 0), Facing: EAST", roboCleaner.getPosition());
}
@Test
public void testMoveForwardWest() {
roboCleaner.direction = RoboCleaner.Direction.WEST;
roboCleaner.moveForward(2);
assertEquals("Position: (-2, 0), Facing: WEST", roboCleaner.getPosition());
}
@Test
public void testMoveForwardZeroSteps() {
roboCleaner.moveForward(0);
assertEquals("Position: (0, 0), Facing: NORTH", roboCleaner.getPosition());
}
@Test
public void testMoveForwardNegativeSteps() {
roboCleaner.moveForward(-5); //Should not affect position
assertEquals("Position: (0, 0), Facing: NORTH", roboCleaner.getPosition());
}
@Test
public void testTurnLeft() {
roboCleaner.turnLeft();
assertEquals("Position: (0, 0), Facing: WEST", roboCleaner.getPosition());
}
@Test
public void testTurnLeftFromWest() {
roboCleaner.direction = RoboCleaner.Direction.WEST;
roboCleaner.turnLeft();
assertEquals("Position: (0, 0), Facing: SOUTH", roboCleaner.getPosition());
}
@Test
public void testTurnRight() {
roboCleaner.turnRight();
assertEquals("Position: (0, 0), Facing: EAST", roboCleaner.getPosition());
}
@Test
public void testTurnRightFromEast() {
roboCleaner.direction = RoboCleaner.Direction.EAST;
roboCleaner.turnRight();
assertEquals("Position: (0, 0), Facing: SOUTH", roboCleaner.getPosition());
}
@Test
public void testMultipleTurns() {
roboCleaner.turnLeft();
roboCleaner.turnRight();
roboCleaner.turnRight();
assertEquals("Position: (0, 0), Facing: EAST", roboCleaner.getPosition());
}
@Test
public void testComplexMovement() {
roboCleaner.moveForward(2);
roboCleaner.turnRight();
roboCleaner.moveForward(3);
roboCleaner.turnLeft();
roboCleaner.moveForward(1);
assertEquals("Position: (3, 3), Facing: NORTH", roboCleaner.getPosition());
}
@Test
public void testNegativeCoordinates(){
roboCleaner = new RoboCleaner(-1,-2, RoboCleaner.Direction.SOUTH);
roboCleaner.moveForward(1);
assertEquals("Position: (-1, -3), Facing: SOUTH", roboCleaner.getPosition());
}
}
|
Modell: |
gemini-1.5-flash-002 |
Temperatur: |
0,2 |
Max. Ausgabetokens: |
8.192 |
TopK: |
40,0 |
TopP: |
0,95 |
|