फेंक दिया गया है, मुझे यह पता लगाना प्रतीत नहीं होता कि मेरे परीक्षणों में से कोई एक विफल क्यों हो रहा है।जुनीट परीक्षण विफल रहा है हालांकि अपेक्षित अपवाद
@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));
}
मैं एक ब्रेकपाइंट सेट और इस प्रक्रिया को कई बार के माध्यम से चले गए हैं:
यहाँ परीक्षण है। यह ChessPiece
कक्षा में दूसरे if-statement में जाता है, और अपवाद फेंकने लगता है। प्रक्रिया तब Rook
कक्षा में वापस जाती है और super
ब्लॉक के नीचे झूठी रिटर्न देती है।
क्या हो रहा है के बारे में कोई विचार? धन्यवाद
प्रासंगिक कोड:
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();
}
}
यह समझना बहुत मुश्किल है कि आपके द्वारा दिए गए आंशिक कोड * बस * से क्या हो रहा है। क्या आप इसे संक्षिप्त लेकिन * पूर्ण * उदाहरण में सरल बना सकते हैं? और यदि आप अपवाद फेंकने के लिए 'isValidMove' की अपेक्षा कर रहे हैं, तो आप * एक * दावा भी करेंगे (जिसे आप नहीं पहुंचेंगे)? –
ओह, और आपका 'चेसपिस.इस वैलिडमोव' कार्यान्वयन अमान्य कोड है - यह कुछ भी वापस नहीं करता है। इससे पता चलता है कि आप जिस कोड को पोस्ट कर चुके हैं उसे नहीं चला रहे हैं। –
testfailure क्या कहता है? –