|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
ditemi voi che dovrei fare...
ecco un perfetto esempio del perché ci siamo bloccati:
Codice:
public void testFlashGemDeleteFlashGem() { insertAndUpdate(createFlashingGem(), 13, 0); insertAndUpdate(createFlashingGem(), 12, 0); insertAndUpdate(createGem(DIAMOND), 11, 0); insertAndUpdate(createGem(DIAMOND), 13, 7); insertAndUpdate(createFlashingGem(), 13, 2); insertAndDropGemsPair(); makeAllGemsFall(); controller.update(environment.getTimer().getTime()); assertNull(grid.getDroppableAt(13, 2)); assertNull(grid.getDroppableAt(13, 0)); assertEquals(grid.getDroppableAt(12, 0).getGridObject().getColor(), DIAMOND); assertEquals(grid.getDroppableAt(13, 7).getGridObject().getColor(), DIAMOND); } eh, ma qui ogni volta che il team viene richiamato all'attenzione scompaiono subito tutti e ci si blocca di nuovo... e grazie al ![]() sapete che vi dico? lo commento e committo; tanto il progetto è ufficialmente chiuso, col codice possiamo farci tutto quello che vogliamo e il mio refactoring è sicuramente più utile di quel test criptico. "testFlashGemDeleteFlashGem", un nome un perché: ma per testare che una flash cancellasse un'altra flash, non bastava piazzare due flash una accanto all'altra, aggiornare e asserire? potevano essere quattro istruzioni, eh... ![]() EDIT: a proposito, il test non passa, ma le flash cancellano ancora le flash; ditemi voi... Ultima modifica di 71104 : 24-06-2006 alle 22:23. |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
ennò, neanche per sogno, perché il repository al momento non è up...
![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
provando a riguardare i test anch'io...
...mi sa che c'è un po' di rumenta anche in testgameloop.java, ad es: le parti evidenziate di questi test, hanno senso in quel punto?
![]() Codice:
public void testSelectVersusModeMenuItem() throws IOException { [.....]assertTrue("The GameLoop must be running", gameLoop.inGameLoop()); //TODO usare il mapping di config //P1.DOWN -> KEY_S, P1.BLOW-> KEY_E Event event = Event.create(Event.Code.KEY_E, Event.State.PRESSED); gameLoop.getPlayerOneInput().notify(event); assertNull("The event blow must not generate a Event", gameLoop.getPlayerOneInput().extractEvent()); } public void testSelectAdvancedModeMenuItem() throws IOException { [.....]assertTrue("The GameLoop must be running", gameLoop.inGameLoop()); //TODO usare il mapping di config //P1.DOWN -> KEY_S, P1.BLOW-> KEY_E Event event = Event.create(Event.Code.KEY_E, Event.State.PRESSED); gameLoop.getPlayerOneInput().notify(event); assertNotNull("The event blow must not generate a Event", gameLoop.getPlayerOneInput().extractEvent()); } Quote:
![]() [mind reading mode] in pratica , probabilmente chi ha scritto quel test voleva accertarsi che la flash desse la priorità all' altra flash senza cancellare pure la gemma e senza scrivere un altro test ... ![]() [/mind reading mode]
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 25-06-2006 alle 00:00. |
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
bah, io sono fin troppo paziente: sono riuscito a committare senza commentare quel test; troppo paziente... -.-
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
boh... non ho idea di cosa sia quel test... mai visto prima...
ma direi che una cosa assolutamente da fare è scrivere delle specie di "linee guida" x come testare certe cose... ad esempio qualche volta mi è capitato di non sapere come fare un test perchè i test che facevano qualcosa simile erano completamente diversi l'uno con l'altro... alla fine pensavo di aver capito come fare e invece...kazzi... non fungeva il test.... questo perchè con i vari refactoring mi sa che si è perso un pò "il filo" e ci sono test che usano ancora dei vecchi metodi per testare quando in realtà utilizzando i nuovi metodi aggiunti nelle varie classi sarebbero molto + semplici.... cmq... tenete duro fino a mercoledì ke finalmente potrò ricominiciare a lavorare su diamonds... anzi... forse giovedì pure... dipende da quello ke sarà rimasto del mio cervello dopo aver studiato 8 miliardi di leggi diverse ![]() EDIT: dimenticavo... soprattutto dovrebbe essere OBBLIGATORIO scrivere il messaggio nell'assert...altrimenti non si capisce una mazza di cosa faccia quel test...
__________________
![]() |
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
Quote:
![]() però ho l' impressione che quello che deve resistere e tenere duro sia tu... mi sa che uno studio pesante più di quello che stai facendo non ci sia... Quote:
![]()
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
|
||
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]() mi sono iscritto ad ingegneria per non aver NULLA a che fare con leggi et similia e ora mi ritrovo a studiare 'ste schifezze che al solo pensiero mi viene il ![]() Spero solo di aver conservato un minimo di sanità mentale xkè in quest'anno mi sono letteralmente macinato il cervello e spero che siano rimasti giusto due o 3 neuroni per permettermi di riagganciarmi al team ![]() e ora vado a letto ke sto scoppiando... ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Già, i test
![]() Non mi tiro fuori...anch'io a volte ho fatto porcate di test che la metà bastava. Il problema è già venuto fuori varie volte: http://www.hwupgrade.it/forum/showthread.php?t=1223385 Direi che i test sono da rifattorizzare tutti...e quello sarò un'altro lavoro da paura ![]() |
![]() |
![]() |
![]() |
#9 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
CHE INUMANA PORCHERIA... O_______O'''
Codice:
public void testCrushesCounters() { insertAndUpdate(createGem(EMERALD), 13, 2); insertAndUpdate(createGem(DIAMOND), 12, 2); insertAndUpdate(createChest(DIAMOND), 11, 2); insertAndUpdate(createChest(EMERALD), 10, 2); insertAndUpdate(createGem(RUBY), 9, 2); insertAndDropGemsPair(); makeAllGemsFall(); controller.update(environment.getTimer().getTime()); checkCountersValues(grid, 5, 1, 1); makeAllGemsFall(); environment.getTimer().advance( environment.getConfig().getInteger("DelayBetweenCrushes")); controller.update(environment.getTimer().getTime()); checkCountersValues(grid, 3, 2, 2); makeAllGemsFall(); environment.getTimer().advance( environment.getConfig().getInteger("DelayBetweenCrushes")); controller.update(environment.getTimer().getTime()); insertAndUpdate(createGem(DIAMOND), 13, 1); insertAndUpdate(createChest(DIAMOND), 12, 1); insertAndUpdate(createGem(RUBY), 11, 1); environment.getTimer().advance( environment.getConfig().getInteger("NewGemDelay")); controller.update(environment.getTimer().getTime()); makeAllGemsFall(); controller.update(environment.getTimer().getTime()); checkCountersValues(grid, 6, 1, 1); } ma come può Diamond Crush contenere una cosa simile? :| Bonfo, diciamo pure che sono da refattorizzare solo per metà: l'altra metà è da rifare -.- |
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
secondo me test come quello che ho appena sgamato e che ho quotato qui sopra sono nati in quel periodo che cercavamo di riprodurre situazioni varie per le big gems; quel test credo che cerci di riprodurre qualche assurdissima situazione in cui avevamo un bug... ma non è così che si deve fare: in queste situazioni trovare le condizioni che riproducono il bug è solo il primo passo: successivamente bisogna capire la causa del bug, ovvero quale linea di codice esattamente manca per evitarlo (o quale linea di troppo va cancellata); nel caso si debba aggiungere una linea, questa va testata nella maniera più semplice, stretta e diretta possibile, mentre nel caso se ne debba togliere una allora va rimosso anche il test che richiede la sua presenza.
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
I test non sono necessariamente legati a un bug: molto spesso rappresentano la "formalizzazione" dei requisiti richiesti (dal customer).
Comunque sono d'accordo: è un test enorme, e aggiungo che un nome più esplicativo sarebbe stato meglio. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
è un test che deve simulare 2 crush(con il chainCounter che cresce), e poi un altro dopo aver inserito la gemsPair(il chainCounter deve essersi resettato).
i tanti check, sono stati usati per verificare l'evolversi dei contatori. Ho a volte trovato dei test che passavano perche testavano la condizione sbagliata, o cose simili. Per questo spesso uso piu assert, per dimostrare che prima la situazione è in un modo, e poi in un altro.(classico esempio andare a vedere se nella posizione x,y non ci deve essere la gemma, si sbagliano le coordinate e il test passa per sbaglio..) Sicuramente si poteva fare il tutto in 2 test, ho fatto cosi, perche nel secondo avrei dovuto replicare quasi tutto il codice del primo per arrivare ad avere il chainCrush a 2(non avendo accesso al setter..) |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Io sono il primo che se lo scorda e preferisce la soluzione che hai usato tu. Ma se non ci abituiamo inmodo diversoil gioco si fa duro. ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
|
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Basterebbe spostare tanti metodi utili in un BaseTest, e far discendere i test da questa classe.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Altri meno..perche devono essere fatti in modo da lasciare pulita la griglia(senza o con la gemsPair?), e devono lasciare la griglia in uno stato ben definito(sempre lo stesso?), in modo che chi le usi dopo sappia cosa fare. Altrimenti, si sposta solo il problema.. |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Ovvero nel costruttore della GridTestUtility si passa la griglia e dopo la si può settare come si pare (presenza o meno della gemsPair) ed effettuare tutte le operazioni "general-purpose" ![]() |
|
![]() |
![]() |
![]() |
#18 | |||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
![]() ![]() Quote:
1) fallisce il corrispettivo "contro-test", ovvero il test che verifica che il codice testato non solo funzioni in un certo modo, ma che non funzioni in nessun altro modo 2) a runtime ti accorgi tu stesso che il programma non funziona Quote:
|
|||
![]() |
![]() |
![]() |
#19 | |||
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Quote:
Quote:
non sempre si testano oggetti "finali". A volte si testano entita di livello un po piu alto(da gridController, a playField per esempio), e se ne testa il comportamento(magari poi realizzato da un oggetto), percui il discorso una riga un test, non è un dogma. |
|||
![]() |
![]() |
![]() |
#20 | |||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
![]() più fattibile di quello che pensi comunque ![]() Quote:
Quote:
|
|||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:35.