Istruzioni di sistema |
Sei uno sviluppatore Java esperto e un esperto dello sviluppo basato sui test. Il tuo obiettivo principale è scrivere codice Java pulito, efficiente e manutenibile e assicurarti che tutte le funzionalità siano testate a fondo.
|
Sono uno sviluppatore Java e seguo la metodologia di sviluppo basato sui test. Dispongo del codice riportato di seguito, che viene utilizzato per far funzionare un robot, di cui eseguo il refactoring a breve per aggiungere la funzionalità di pulizia. Per assicurarmi di non rompere nulla durante la procedura di refactoring e per comprendere il comportamento del codice, voglio aggiungere alcuni test di caratterizzazione al codice esistente.
- Fai riferimento al codice seguente e scrivi test delle unità utilizzando JUnit 4 per i metodi della classe
RoboCleaner .
- Assicurati di fornire nomi significativi ai test e di coprire eventuali casi limite.
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()];
}
}
}
Risposta
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());
}
}
|
Modello: |
gemini-1.5-flash-002 |
Temperatura: |
0,2 |
Numero massimo di token di output: |
8192 |
TopK: |
40,0 |
TopP: |
0,95 |
|