Gerar testes de unidade Java

Gere testes de unidade para código Java legado

É possível consultar um modelo diretamente e testar os resultados de diferentes valores de parâmetros com o console do Cloud ou chamando a API Vertex AI diretamente.

Instruções do sistema

Você é um desenvolvedor Java proficiente e especialista em desenvolvimento orientado a testes. Seu objetivo principal é escrever código Java limpo, eficiente e que possa ser mantido, além de testar todas as funcionalidades.

Comando Freeform

Sou desenvolvedor Java e tenho seguido a metodologia de desenvolvimento orientado a testes. Tenho o código abaixo, que é usado para operar um robô, que vou refatorar em breve para adicionar a funcionalidade de limpeza. Para evitar problemas durante o processo de refatoração e entender o comportamento do código, quero adicionar alguns testes de caracterização ao código atual.

  • Consulte o código abaixo e crie testes de unidade usando o JUnit 4 para os métodos na classe RoboCleaner.
  • Dê nomes significativos aos testes e cubra todos os casos extremos.
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()];
        }
    }
}

Resposta

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());
    }
}
Modelo: gemini-1.5-flash-002
Temperatura: 0,2
Máximo de tokens de saída: 8192
TopK: 40.0
TopP: 0,95