クラス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を実行した結果が下記の画面です。
【図52 PosTestの結果】
7つのテストのうち4つが失敗しています。順番に見ていきましょう。JUnitのビューで実際にエラーになっている「testMove1 (0.001 s)」という行をダブルクリックします。すると、エディタービューにエラーが起きた行が表示されます。
【図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のデバッグ機能を使ってみたいと思います。
(つづく)