public static void main(String[] args) {

    Grados.usarJava8 = true;

    testConstructorNormal();
    testConstructorExcepcion();

    testSetEmailNormal();
    testSetEmailExcepcion();

    testMatriculaAsignatura();
    testMatriculaAsignaturaExcepcion();

    testEliminaAsignatura();
    testEliminaAsignaturaExcepcion();

    Alumno a1 =
        Grados.createAlumno(
            "12345678Z",
            "Juaan",
            "Nadie Nadie",
            LocalDate.of(1950, 3, 15),
            "*****@*****.**");
    Alumno a2 =
        Grados.createAlumno(
            "12345678Z", "Juan", "Nadie Nadie", LocalDate.of(1950, 3, 15), "*****@*****.**");
    System.out.println(a1.equals(a2));
    System.out.println(a1.compareTo(a2));
  }
 private static void testEliminaAsignatura() {
   System.out.println("\n==================================Probando eliminaAsignatura");
   Alumno a =
       Grados.createAlumno(
           "12345678Z", "Juan", "Nadie Nadie", LocalDate.of(1950, 3, 15), "*****@*****.**");
   Asignatura asig =
       Grados.createAsignatura(
           "Fundamentos de Programación", "2050001", 12.0, TipoAsignatura.ANUAL, 1, null);
   a.matriculaAsignatura(asig);
   testEliminaAsignatura(a, asig);
 }
  private static void testEliminaAsignatura(Alumno a, Asignatura asig) {

    try {
      System.out.println("Las asignaturas antes de la operación son: " + a.getAsignaturas());
      System.out.println("Asignatura a eliminar: " + asig);
      a.eliminaAsignatura(asig);
      System.out.println("Las asignaturas después de la operación son: " + a.getAsignaturas());
    } catch (ExcepcionAlumnoOperacionNoPermitida e) {
      System.out.println(
          "******************** Se ha capturado la excepción ExcepcionAlumnoOperacionNoPermitida");
    } catch (Exception e) {
      System.out.println("******************** Se ha capturado una excepción inesperada.");
    }
  }
  private static void testSetEmail(Alumno a, String nuevoEmail) {

    try {
      System.out.println("El email antes de la operación es: " + a.getEmail());
      System.out.println("El nuevo email es: " + nuevoEmail);
      a.setEmail(nuevoEmail);
      System.out.println("El email después de la operación es: " + a.getEmail());
    } catch (ExcepcionAlumnoNoValido e) {
      System.out.println(
          "******************** Se ha capturado la excepción ExcepcionAlumnoNoValido");
    } catch (Exception e) {
      System.out.println("******************** Se ha capturado una excepción inesperada.");
    }
  }
  private static void testMatriculaAsignatura(Alumno a, Asignatura asig) {

    try {
      System.out.println("Las asignaturas antes de la operación son: " + a.getAsignaturas());
      System.out.println("Nueva asignatura a matricular: " + asig);
      a.matriculaAsignatura(asig);
      System.out.println("Las asignaturas después de la operación son: " + a.getAsignaturas());
      mostrarAlumno(a);
    } catch (ExcepcionAlumnoOperacionNoPermitida e) {
      System.out.println(
          "******************** Se ha capturado la excepción ExcepcionAlumnoOperacionNoPermitida");
    } catch (Exception e) {
      System.out.println("******************** Se ha capturado una excepción inesperada.");
    }
  }
 private static void mostrarAlumno(Alumno a) {
   System.out.println("Alumno --> <" + a + ">");
   System.out.println("\tDNI: <" + a.getDNI() + ">");
   System.out.println("\tNombre: <" + a.getNombre() + ">");
   System.out.println("\tApellidos: <" + a.getApellidos() + ">");
   System.out.println(
       "\tFecha Nacimiento: <"
           + a.getFechaNacimiento().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))
           + ">");
   System.out.println("\tEdad: <" + a.getEdad() + ">");
   System.out.println("\tEmail:  <" + a.getEmail() + ">");
   System.out.println("\tAsignaturas:  <" + a.getAsignaturas() + ">");
 }