[解決済み] JUnit テストで期待した例外がスローされたが失敗する
質問
あるテストがなぜ失敗するのか、その原因がわからないようです。
以下がそのテストです。
@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));
}
ブレークポイントを設定し、何度も処理をしています。の2つ目のif文に入ります。
ChessPiece
クラスで、例外をスローするようです。その後、処理は
Rook
クラスの下で false を返します。
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();
}
}
解決方法は?
<ブロッククオートChessPieceクラスの2番目のif文に入ります。 は例外を投げるようです。その後、処理はRookに戻り クラスで、スーパーブロックの下で false を返します。
何が起こっているかというと、最初の行の
isValidMove()
の
Rook
クラスコール
super
メソッドで制御されますが、2番目の
if
がスローされます。
IllegalArgumentException
そして、制御は子クラスに戻り、すなわち
Rook
であり、それは
return false
super が例外をスローしたので、例外はこのメソッドの外側で再度スローされ、junit からは再度スローされます。
complainsIfFromLocIsDifferentObject
メソッドを使用します。
これはJUnitフレームワークによって理解され、テストケースを通過するはずです。
次の行があるかどうか確認してください。
@RunWith(value = BlockJUnit4ClassRunner.class)
をテストケース・クラスに追加してください。
UPDATEです。
@RunWith(value = BlockJUnit4ClassRunner.class)
public class Test extends TestCase{
@Test(expected = IllegalArgumentException.class)
public void test1() throws Throwable{
assertFalse(throwException());
}
private boolean throwException(){
throw new IllegalArgumentException();
}
}
このテストケースは私にとっては合格です。
関連
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Jasmineで'Error'が投げられることを期待するテストを書くには、どうすればよいですか?
-
[解決済み] JUnit Testアノテーションを使用して例外メッセージをアサートするにはどうすればよいですか?
-
[解決済み】System.out.println()のJUnitテスト)
-
[解決済み】JUnit 5:例外がスローされたことをアサートする方法は?
-
[解決済み】例外がスローされないことをテストする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】Javaメソッドスタブ
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件