« Javaアプレット(35) バグの発見 | トップページ | Javaアプレット(37) Javaの文字列の比較 »

2012/02/09

Javaアプレット(36) JUnitテストケースのデバッグ

クラスPosの3つのテストプログラムのうち、2路盤のアプリSample6は前回までのデバッグでバグが改修されました。3路盤のアプリSample5についても実行してみたところ、7手目が、

turn:B

(1,1)
#7
F'=
1 1 1 1 0 0 0 0 0
1 1 1 0 1 0 0 0 0
0 1 1 0 0 1 0 0 0
1 0 0 1 1 0 1 0 0
0 1 1 1 1 1 1 1 1
0 1 1 1 1 1 0 1 1
0 0 0 1 0 0 1 1 0
0 1 0 1 1 1 1 1 1
0 0 0 0 0 1 0 1 1
b'=(1 1 1 0 1 1 1 1 1
)
w'=(0 1 1 1 0 0 1 0 1
)
l=(0 1 1 0 0 0 1 0 1
)
h=(1 1 1 0 0 1 1 0 1
)
a=(0 1 1 0 0 0 1 0 1
)
d=(0 1 1 0 0 0 0 0 0
)
A=
1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
D=
1 1 1 1 1 1 1 1 1
1 1 1 0 1 0 0 0 0
0 1 1 0 0 1 0 0 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
'@++
'O@@
'+@+

と、白の2子を正しく取れていました。これも大丈夫そうです。残るテストはJUnitテストケースPosTestです。

Sample5、Sample6をパスした後、PosTestを実行した結果が下記の画面です。
図:PosTestの結果
【図52 PosTestの結果】

7つのテストのうち4つが失敗しています。順番に見ていきましょう。JUnitのビューで実際にエラーになっている「testMove1 (0.001 s)」という行をダブルクリックします。すると、エディタービューにエラーが起きた行が表示されます。
図:JUnitテストでエラーになった行
【図53 JUnitテストでエラーになった行】

このテストは2路盤で黒右上、白左上、黒右下と打ってできた盤面をgetStone()メソッドを使って確認するテストです。エラーメッセージは、

java.lang.AssertionError: testMove1:(1,1)=2が1ではありません

となっています。BLACKが1でWHITEが2なので、左上=白が黒ではありません、という意味です。これは、testMove1のテストケースが間違っていました。期待値を配列に入れたのですが、getStone()は1 origin、配列は0 originであることを忘れていました。1 originは1から始まる添字、0 originは0から始まる添字を意味します。

testMove1の、

int e = exp[row][col];

という行を、

int e = exp[row - 1][col - 1];

に直したところエラーは消えました。実はtestMove2にも同じバグがあったのですが、たまたまエラーになっていませんでした。

testGetStone1とtestGetStone2も同様のテストケース側のバグでした。

最後にtestToStringのエラーを追っていきます。testToStringは、PosクラスのtoString()メソッドの出力結果をテストケース内に持つ期待される結果と比較し、エラーを出しています。どこがおかしいのかよく分からないので、またEclipseのデバッグ機能を使ってみたいと思います。

(つづく)

|

« Javaアプレット(35) バグの発見 | トップページ | Javaアプレット(37) Javaの文字列の比較 »

Java」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Javaアプレット(36) JUnitテストケースのデバッグ:

« Javaアプレット(35) バグの発見 | トップページ | Javaアプレット(37) Javaの文字列の比較 »