Vedere video https://www.youtube.com/watch?v=58vtylcMOFo&list=PLv6UtFrA7VEu4PtzJaGHHSeZBi6mdJtwv&index=12 Continuiamo a scrivere i metodi considerando la specifica 4 su checkOut e checkIn. Scriveremo il test che controlla entrambi. Specifiche delle operazioni di prestito e restituzione:
- legare un oggetto Person() ad un oggetto Book() inserendo nel campo person della classe Book() tale oggetto Person() . Utilizzeremo quindi il metodo setPerson di Book()
- gestire il caso in cui il libro è già in prestito. Possiamo controllare questo vedendo se il campo person è pieno o vuoto.
- Il metodo potrebbe essere eseguito e fallire a causa di questo, avvertire in caso di fail.
Pseudo code:
- controlla che this book non sia in prestito
- se non è in prestito, setta il campo person del book al valore this person e fai sapere che il metodo ha avuto successo
- altrimenti fai sapere che il metodo ha fallito.
Per far sapere se il metodo ha avuto successo o ha fallito si fa ritornare il boolean true o false (quindi il metodo ritorna un boolean). Dobbiamo inoltre sapere che cosa significa this book e this person, quindi li passeremo come parametri del metodo (sarà public boolean checkOut(Book b, Person p) , però noi come al solito iniziamo dal test). Il metodo testCheckOut deve iniziare con setup() poi aggiungeremo libri e persone alla libreria ml (vedi codice). Impostiamo poi un controllo per la riga di fail: assertTrue("Book did not check out correctly", ml.checkOut(b1,p1). Infatti ml.checkOut(b1,p1) ritornerà un boolean. Facciamo anche il controllo della persona a cui è stato prestato il libro: assertEquals("Fred", b1.getPerson.getName()) . Facciamo anche i seguenti controlli (vedi codice):
- per il checkOut:
- il libro è già in prestito
- la restituzione fallisce
- per il checkIn:
- il libro è già stato restituito
- il libro non è mai stato prestato.
Con il quick fix creiamo i metodi checkOut e checkIn nella classe MyLibrary(), poi scriviamo il codice. Per il checkOut ricordiamo che checkOut(b1,p1) deve settare b1.setPerson(p1), ma SOLO se il campo b1.getPerson() è vuoto. Usiamo alcuni nuovi comandi (vedi codice) : condizione if ; == , != , null. Analogamente per checkIn (vedi codice).