Non riesco a capire perché uno dei miei test stia fallendo.JUnit test fallito, sebbene venga lanciata un'eccezione prevista
Ecco il test:
@Test(expected = IllegalArgumentException.class)
public void complainsIfFromLocIsDifferentObject() throws Throwable {
board.set(make(), 1, 3); //Creates different rook from 'piece'
assertFalse("ChessPiece Test 2", piece.isValidMove(getValidMove(1, 3), board));
}
Ho impostato un punto di interruzione e passati attraverso il processo più volte. Entra nella seconda istruzione if nella classe ChessPiece
e sembra lanciare l'eccezione. Il processo torna quindi alla classe Rook
e restituisce false nel blocco super
.
Qualche idea su cosa sta succedendo? Grazie
codice Rilevante:
public class Rook extends ChessPiece {
@Override
public boolean isValidMove(Move m, IChessBoard b) {
if (super.isValidMove(m, b) == false)
return false;
// Add logic specific to rook
if(m.fromRow == m.toRow || m.fromColumn == m.toColumn)
return true;
else
return false;
}
}
public abstract class ChessPiece implements IChessPiece {
@Override
public boolean isValidMove(Move m, IChessBoard b) {
//Verify that there is a piece at the origin
if (b.pieceAt(m.fromRow,m.fromColumn) == null)
throw new IllegalArgumentException();
// Verify that this piece is located at move origin
IChessPiece piece = b.pieceAt(m.fromRow, m.fromColumn);
if (this != piece)
throw new IllegalArgumentException();
}
}
È molto difficile capire cosa sta succedendo da * solo * il codice parziale che hai fornito. Puoi semplificarlo in un breve esempio * completo *? E se ti aspetti 'isValidMove' di lanciare un'eccezione, perché dovresti * anche * avere un'asserzione (che non raggiungerai)? –
Oh, e l'implementazione 'ChessPiece.isValidMove' è un codice non valido - non restituisce nulla. Ciò suggerisce che non stai eseguendo il codice che hai pubblicato. –
Cosa dice il testfailure? –