私は最近tddをいじり始め、なぜ一方が機能し、もう一方が機能しないのか理解できないという問題に遭遇しました。
次のコードは私のために働きます:
public class Ant {
public Ant(Point startLocation, Point hive) {
this.currentLocation = new Point(startLocation);
this.hive = new Point(hive);
}
public void goHome() {
if (hive.x > currentLocation.x) {
currentLocation.x++;
} else if (hive.x < currentLocation.x){
currentLocation.x--;
}
if (hive.y > currentLocation.y) {
currentLocation.y++;
} else if (hive.y < currentLocation.y){
currentLocation.y--;
}
}
}
対応するテスト:
@DataProvider(name = "goneHome")
public static Object[][] goHome() {
return new Object[][] {
{new Point(2,1), new Point(3,2), new Point(7,8)},
{new Point(20,1), new Point(19,2), new Point(7,8)},
{new Point(23,10), new Point(22,9), new Point(7,8)},
{new Point(2,10), new Point(3,9), new Point(7,8)},
{new Point(2,8), new Point(3,8), new Point(7,8)},
{new Point(7,1), new Point(7,2), new Point(7,8)}
};
}
@Test(dataProvider = "goneHome")
public void testGoHome(Point currentPosition, Point nextPosition, Point hive)
throws Exception {
Ant ant = new Ant(currentPosition, hive);
ant.move();
assertEquals(ant.getCurrentLocation(), nextPosition);
}
Ant コンストラクターを次のように変更すると、テストは失敗します。
public Ant(Point startLocation, Point hive) {
this.currentLocation = startLocation;
this.hive = hive;
}
失敗するとは、DataProvider の最初の 2 つのセットを使用したテストが正しく機能することを意味し、残りは失敗/終了していません。何が失敗したのかよくわかりませんが。DataProvider の最初の 2 つのデータ セットを削除しても、最初の 2 つのデータセット (前に 3 番目と 4 番目のデータ セットがある場所) のみが失敗しません。
私はIntelliJを使用していますが、「失敗した」テスト以外のシンボルはまだ「読み込み中のアイコン」です。
各テスト ケースをデバッグすると、ポイントが正しく設定されていることがわかります。テストからアサートを削除しても、何も変わりません。
誰かが私にこの振る舞いを説明してもらえますか?
前もって感謝します
エゴン
編集:失敗したコンストラクタのバージョンを修正