Java >> Tutorial de Java >  >> Java

Desarrollo basado en pruebas:cómo escribir una prueba antes de que no exista ningún código de implementación

Cree la clase EnrollingServiceTest en src/test/java en el mismo paquete que EnrollingService

class EnrollingServiceTest {
    private EnrollingService enrollingService;

    @Before 
    public void init() {
           enrollingService = new EnrollingService();
    }

    @Test
    public void testEnroll() {
           boolean result = enrollingService.enroll(1l, 1l);
           assertTrue(result);
    ...

IDE (supongo que está utilizando IDE) muestra errores:EnrollingService no existe.

Coloque el cursor en EnrollService - IDE ofrecerá crear una clase - déjelo crear en src/main/java

Ahora IDE dice que falta el método de inscripción (largo, largo); deje que IDE lo cree por usted.

Ahora IDE no muestra errores. Ejecute la prueba, falla. Ve a inscribirte y comienza a implementar la lógica

Y así sucesivamente...


Esto quedará más claro cuando se concentre en el comportamiento esperado del código en lugar de la implementación del código. Entonces, dado el escenario que describió, puede llegar a la conclusión de que tendrá que escribir el método enroll() en alguna clase. Luego puede considerar cómo va a probar esta clase.

Empiece considerando las condiciones de la clase y lo que se espera de ella. Tal vez puedas identificar ciertos invariantes de la clase. En ese caso, para probar la clase, considere las formas en que se puede violar ese invariante.

Así que tomando la declaración:un estudiante puede inscribirse en un máximo de 3 cursos por semestre, considere las formas en que esto puede ocurrir.

  1. El estudiante está registrado en 0 cursos para el semestre dado, intento de registrarse para un curso, resultado:registro exitoso; el estudiante ahora está registrado en 1 curso para el semestre dado.
  2. El estudiante está registrado en 1 curso para un semestre dado, intento de registrarse en un curso, resultado:registro exitoso; el estudiante ahora está registrado en 2 cursos para el semestre dado.
  3. El estudiante está registrado en 3 cursos para el semestre dado, intenta registrarse para un curso, resultado:Reprobado (¿tal vez se lanza una excepción?)
  4. etc etc

A continuación, escribe estas pruebas. Cada uno de estos puede ser un método de prueba. Por lo tanto, el método de prueba garantizaría que se creen los objetos y que el entorno se configure como se esperaba. Luego llame al método y compare el resultado con el resultado esperado. Si lo que espera que suceda realmente sucede, la prueba pasó.

Ahora, inicialmente, dado que aún no escribió el método, las pruebas en realidad no pasarían. Pero a medida que comienza a escribir código, sus pruebas comenzarán a pasar y eventualmente el 100% de sus pruebas pasarán, momento en el que está satisfecho de que su código cumple con los requisitos.


public void shouldNotEnrollInMoreThanFourClassesInASemester() {
  Enroller enroller = new Enroller();
  Student student = new Student();
  Semester one = new Semester();
  Semester two = new Semester();
  Course geology = new Course(one);
  Course architecture = new Course(one);
  Course calculus = new Course(one);
  Course sociology = new Course(one);
  Course geometry = new Course(two);

  assertOk(enroller.enroll(student, geology));
  assertOk(enroller.enroll(student, architecture));
  assertOk(enroller.enroll(student, calculus));
  assertNotOk(enroller.enroll(student, sociology));
  assertOk(enroller.enroll(student, geometry));
}

Etiqueta Java