Vedere video: https://www.youtube.com/watch?v=Z_QeGOs0cXw&index=6&list=PLv6UtFrA7VEu4PtzJaGHHSeZBi6mdJtwv Test Driven Deelopment (TDD): consiste nello scrivere prima il test del codice. Questo permette di definire molto bene le specifiche iniziali. Vediamo il metodo toString() che è ereditato dalla classe Object(): ritorna una rappresentazione stringa dell'oggetto. Quindi, ad es. nello scrapbook, possiamo inizializzare una p Person() e scrivere p.toString() --> inspect . Vediamo che funziona ma non è molto utile, perché gli attributi della classe non vengono visualizzati. Quindi modifichiamo il metodo ereditato, cioè facciamo overriding. Invece che scrivere il codice direttamente nella classe Person(), prima scriviamo cosa ci aspettiamo nel test case--> definiamo la specifica. Useremo quindi il Test Driven Development:
- pensare che cosa deve fare il metodo
- scrivere il test case per testarlo
- scrivere il metodo
- testare il nuovo metodo
- se il test passa --> OK
Quindi nel PersonTest.java aggiungiamo un nuovo metodo chiamato testToString() in cui istanziamo una p4 (vedi codice), settiamo il name e il maximumBooks, e vogliamo che ritorni una stringa del tipo "Fred Flintstone (7 books)". Quindi scriviamo l'intera stringa (senza passaggio di parametri o variabili); poi usiamo il comando assertEquals per verificare l'uguglianza (vedi codice). Naturalmente la verifica non passa (dobbiamo ancora scrivere il metodo toString() per la classe Person() !!!). Quindi scriviamo il metodo toString della classe Person(): deve ritornare una stringa (che di concatena con il simbolo +), quindi return this.getName() + " (" + this.getMaximumBooks() +" books)". Usiamo il get anzichè gli attributi (ad es. p4.name o p4.maximumBook) perché questo aiuta per le modifiche future. Se ad esempio, in seguito, vogliamo splittare nome e cognome, grazie al get possiamo modificare esclusivamente il getName(), scrivendo return firstName + " " + lastName() e tutto il resto rimane invariato.