|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
[CICLO 5 STORIA 2] Test Driven Development (Cover - TigerShark)
Iniziamo questa sessione di TDD in pair programming.
Al solito NON COMMITTATE perchè lo stato del repository sarà precario dopo quello che faremo!
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Ok, proviamo ^^
Anche aggiungendo noi la gemma, ci serve comunque un test che ci dica quando ne è presente un'altra subito sotto la posizione corrente del diamante. Noi sappiamo che è presente perchè la aggiungiamo tramite insertGemAt, però quando la gemma scende deve poter controllare se il blocco successivo sia libero per poter scendere ancora. Quindi il primo test è di aggiungere due gemme e controllare che sotto la prima ci sia la seconda. Ecco il test (speriamo in bene Codice:
public void testGemInNextRow()
{
grid.insertGem(4, 3, gem1);
grid.insertGem(5, 3, gem2);
assertTrue("another gem in next row,in same column", grid.thereIsGemBelow(gem1));
}
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prima dovevo finire il 5.2.1
Ora lo committo... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè i test nuovi o aggiunti non li mettete in it.diamonds.test.ignore ? Almeno la build machine non fa una build rossa...
Ancora un attimo epr il mio commit... Vi devo togliere il test che avete fatto... |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Perfetto.
il test fallisce correttamente per farlo passare basta scrivere questo codice: Codice:
public boolean isGemBelow(Gem gem)
{
return true;
}
Ma ora posso anche pingermi un pochino avanti e controllare effettivamente se ci sia o meno una gemma nella casella sottostante.... per questo: Codice:
public boolean isGemBelow(Gem gem)
{
Cell currentCell = findGemCell(gem);
return isGemAt(currentCell.row() + 1, currentCell.column());
}
ovviamente questo codice ancora "puzza" un pò.... ma dato che fa passare i test fa il suo compito e per ora può andare
__________________
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Ragazzi, quando fate il commit di un test che fallisce, mettetelo in tests.ignore cosi' la build non si rompe.
Grazie
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
si sistemato..
ho lasciato il test che passa in TestGrid ma ora ho creato TestGrid sotto ignore per poter lavorare tranquillamente là
__________________
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
NON FATE COMMITTTTTTTT !!!
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ora potete lavor4arci, attenzione che ho rimosso il vostro codice...
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Fek, mea culpa ^^
Ho modificato il test in questo modo: Codice:
public void testGemInNextRow()
{
grid.insertGem(4, 3, gem1);
assertFalse("Cell under current position is not empty", grid.isGemBelow(gem1));
grid.insertGem(5, 3, gem2);
assertTrue("Cell under current position is empty", grid.isGemBelow(gem1));
}
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us! |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
si in effetti mi sono fatto prendere un pò la mano
però mi sentivo abbastanza sicuro da scrivere 2 righe di codice (letterlamente Ora grazie a te abbiamo pure il test che ci assicura il corretto funzionamento del codice da me scritto Torniamo a noi... A questo punto direi di verificare che la gemma continui la sua caduta se la cella sottostante è libera: Codice:
public void testGemIsMovingWhenNextCellIsEmpty()
{
grid.insertGem(4, 3, gem1);
grid.setGemUnderControl(gem1);
grid.setGravity(1.0f);
float oldPosY = gem1.getY();
grid.update();
assertEquals("Gem is not moving when cell under current position is empty", gem1.getY(), oldPosY + 1.0, 0.0000001);
}
a te
__________________
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Si scrive nuovo codice solo in presenza di un test che fallisce.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() mi è scappato kiedo venia! cmq me ne sono reso conto subito e ho detto a cover d aggiungere il test corrispondente (e ci aveva pensato pure lui contemporaneamente
__________________
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Bene, ora direi di controllare che la gemma non effettui alcun movimento in caso di una gemma presente nella riga sotto.
Test: Codice:
public void testGemIsStopWhenNextCellIsFull()
{
grid.insertGem(5, 2, gem1);
grid.insertGem(6, 2, gem2);
grid.setGemUnderControl(gem1);
grid.setGravity(1.0f);
grid.update();
assertTrue("Gem has overlapped one already present", gem1.notMoved);
}
Codice:
assertTrue("Gem has overlapped one already present", gem1.notMoved);
Codice:
assertFalse("Gem has overlapped one already present", gem1.Moved);
Forse assertFalse, tu che dici ?
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us! |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
personalmente preferirei l'assertFalse in combinazione con moved....
comunque ora scrivo il codice e vedo quale suona meglio per sicurezza
__________________
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Ricordati di scrivere il minimo ed indispensabile per compilare il programma, ed in seguito per far passare il test, nulla di più.
Sempre se tieni alle mani
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us! |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Allora...
piccolo refactoring: Codice:
public void testGemIsMovingWhenLowerCellIsEmpty()
{
grid.insertGem(4, 3, gem1);
grid.setGemUnderControl(gem1);
grid.setGravity(1.0f);
float oldPosY = gem1.getY();
grid.update();
assertEquals("Gem is not moving when cell under current position is empty", gem1.getY(), oldPosY + 1.0, 0.0000001);
}
public void testGemIsStoppedWhenLowerCellIsFull()
{
grid.insertGem(5, 2, gem1);
grid.insertGem(6, 2, gem2);
grid.setGemUnderControl(gem1);
grid.setGravity(1.0f);
grid.update();
assertFalse("Gem has overlapped one already present", gem1.moved());
}
Codice:
public boolean moved()
{
return false;
}
__________________
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Ma...ma...ma cosa vedo, che bello! Questo metodo non è male, ci serve anche per il test precedente, infatti possiamo usare direttamente .moved per controllare che effettivamente la gemma si sia mossa, senza utilizzare direttamente le coordinate nel test
Quindi cambierei il test precedente da: Codice:
public void testGemIsMovingWhenLowerCellIsEmpty()
{
grid.insertGem(4, 3, gem1);
grid.setGemUnderControl(gem1);
grid.setGravity(1.0f);
float oldPosY = gem1.getY();
grid.update();
assertEquals("Gem is not moving when cell under current position is empty", gem1.getY(), oldPosY + 1.0, 0.0000001);
}
A questa nuova versione: Codice:
public void testGemIsMovingWhenLowerCellIsEmpty()
{
grid.insertGem(4, 3, gem1);
grid.setGemUnderControl(gem1);
grid.setGravity(1.0f);
grid.update();
assertTrue("Gem is not moving when cell under current position is empty", gem1.moved());
}
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us! |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
oh che bello!
il test appena modificato fallisce! per farlo passare aggiungo: Codice:
private boolean moved;
public boolean moved()
{
return moved;
}
public void setMoved(boolean moved)
{
this.moved = moved;
}
Codice:
private void applyGravity(Gem gem, Cell cell)
{
if(gemHasCollidedWithBottom(gem))
{
final float heightFromGround = bounds.bottom() - gem.getHeight()
- gem.getY();
gem.move(0, heightFromGround);
if(!gem.wasDropped())
{
gem.drop();
}
}
else
{
gem.move(0, actualGravity);
gem.setMoved(true);
}
}
__________________
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Per la serie: Notte Horror, questa sera presentiamo in prima visione: "Code Horror", un film tratto da una storia vera
Non mi è venuto in mente niente a parte questa modifica ( Codice:
private void applyGravity(Gem gem, Cell cell)
{
boolean isGemBelow = false;
if(!gemHasCollidedWithBottom(gem))
{
try
{
isGemBelow = isGemBelow(gem);
}
catch(IllegalArgumentException e)
{
}
}
if(gemHasCollidedWithBottom(gem) || isGemBelow)
![]() Però i test passano tutti, il gioco funziona...anche se le gemme vengono disegnate in fondo le celle vengono occupate, da diamanti "fantasma"
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us! Ultima modifica di cover : 16-11-2005 alle 23:30. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:42.





















