Fillomino Player Architecture / Test Cases

ここからは、テスト駆動開発を行うためのテストケースを決めていく。 テストケースは、ユースケースのシナリオを参考に作成していく。 ここで、テストシナリオにおいて、メソッド名の後に続く[pp]は、このメソッドがpackage-privateであることを意味しています。

ユースケース:表示の更新

表示の更新はシステムが行うものであり、ユーザーが直接トリガーするものではないため、 シナリオは定義していない。従って、Modelや一連のRenderシステムのユニットテストのみを行った。

テストケース:盤面の作成
テスト内容盤面が正しく作られるかどうか確認する。
入力データ3X3の盤面を作成する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • RenderStrategyを作成する。
テストシナリオ
  • Model#createBoard()で盤面を作成する。
  • Model#getWidth()の返値である盤面の幅が正しいか確認する。
  • Model#getHeight()の返値である盤面の高さが正しいか確認する。
  • Model#contains()が正しく機能しているか確認する。
テストケース:空白状態の描画
テスト内容空白状態に対応するレンダラーが正しく呼ばれるかどうかを確認する。
入力データ
  • 7X7の盤面を作成する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • RenderStrategyを作成する。
  • Rendererを登録する(Mock Object)。
テストシナリオ
  • Model#createBoard()で盤面を作成する。
  • すべてのセルが空白状態であるかどうかをModel#isSpace()で確認する
  • 盤面の状態をModel#getCurStateAt()で取得し、(0, 0), (1, 1)が空白状態と等しいことを確認する。
  • (0, 0)の状態に相当するRendererをRendererLocator#lookup()で取得する。
  • 予期される実行結果と等しいか確認する。
  • (1, 1)の状態に相当するRendererをRendererLocator#lookup()で取得する。
  • 予期される実行結果と等しいか確認する。
テストケース:単一箇所選択状態の描画
テスト内容単一箇所を選択した後、正しく描画するかどうかをテスト。
入力データ(3, 4)を選択する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ9X13の盤面を作成する。
  • RenderStrategyを作成する。
  • Rendererを登録する(Mock Object)。
  • (0, 0)を選択状態にしておく。
テストシナリオ
  • (0, 0)の状態に相当するRendererをRendererLocator#lookupで取得する。
  • 予期される実行結果と等しいか確認する。
  • (3, 4)をChangeHandler#notifySelectionChanged()で選択する。
  • 変更箇所が(0, 0), (3, 4)であることを確認する。
  • (0, 0)の状態に相当するRendererをRendererLocator#lookupで取得する。
  • 予期される実行結果と等しいか確認する。
  • (3, 4)の状態に相当するRendererをRendererLocator#lookupで取得する。
  • 予期される実行結果と等しいか確認する。
テストケース:入力数字の描画
テスト内容入力した数字が、正しく描画するかどうかをテスト。
入力データ(0, 0)に8を入力する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ9X13の盤面を作成する。
  • RenderStrategyを作成する。
  • Rendererを登録する(Mock Object)。
  • (0, 0)を選択状態にしておく。
テストシナリオ
  • 選択箇所に、ChangeHandler#notifyInputOccured()で8を入力する選択する。
  • 1箇所だけ変更されたことを、Model.lastModified()の返値より確認する。
  • 変更箇所が(0, 0)であることを確認する。
  • (0, 0)の状態に相当するRendererをRendererLocator#lookupで取得する。
  • 予期される実行結果と等しいか確認する。

ユースケース:単一箇所の選択

ユースケースのシナリオで定義した、単一箇所の選択と同一箇所の選択をベースにテストケースを定義した。

テストケース:単一箇所の選択
テスト内容単一セルを選択し正しく反応するかどうかをテストする。
入力データ(0, 0)を選択
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ6X8の盤面を作成する。
  • 盤面の変更をリセットする。
テストシナリオ
  • 盤面が変更されていないことをModel#isModified()で確認する。
  • 変更箇所が0箇所であることをModel#lastModified()の返値である配列のサイズより確認する。
  • 現在のアクティブポジションが(0, 0)であることをFilloChangeHandler#getActivePos()[pp]で確認する。
  • (0, 0)が選択状態であることをModel#getCurStateAt()の返値で確認する。
  • (0, 1)を選択する。
  • 盤面が変更されていることをModel#isModified()で確認する。
  • 変更箇所が2箇所であることをModel#lastModified()の返値である配列のサイズより確認する。
  • (0, 0)が空白状態であることをModel#getCurStateAt()の返値で確認する。
  • (0, 1)が選択状態であることをModel#getCurStateAt()の返値で確認する。
  • 現在のアクティブポジションが(0, 1)であることをFilloChangeHandler#isActivePos()[pp]で確認する。
  • 変更を反映させる
  • 盤面が変更されていないことをModel#isModified()で確認する。
  • 変更箇所が0箇所であることをModel#lastModified()の返値である配列のサイズより確認する。
テストケース:同一箇所の選択
テスト内容単一セルを選択し正しく反応するかどうかをテストする。
入力データ(0, 0)を選択
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ6X8の盤面を作成する。
  • 盤面の変更をリセットする。
テストシナリオ
  • (0, 0)を選択する。
  • アクティブポジションと同じセルを選択したかどうかをFilloChangeHandler#isActivePos()[pp]で確認する。
  • 盤面が変更されていないことをModel#isModified()で確認する。
  • 変更箇所が0箇所であることをModel#lastModified()の返値である配列のサイズより確認する。

ユースケース:数字の入力

ユースケースのシナリオとして定義した、単一選択位置に入力への成功パターンと同じ数字の入力をベースにテストケースを定義した。

テストケース:単一選択位置に入力ー成功1
テスト内容単一選択された位置に現在とは異なる数字を入力する。その1。
入力データ(0, 0)に1を入力する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ9X7の盤面を作成する。
  • (0, 0)を選択状態にする。
  • 盤面の変更をリセットする。
テストシナリオ
  • (0, 0)が空白であることを、Model#isSpaceAt()で確認する。
  • (0, 0)が選択状態であることをFilloChangeHandler#isActivePos()[pp]で確認する。
  • 3の入力が妥当であることをFilloChangeHandler#velifyInputRange()[pp]で確認する。
  • (0, 0)にChangeHandler#notifyInputOccured()で3を入力する。
  • 盤面が変更されていることをModel#isModified()で確認する。
  • 変更箇所が1箇所であることをModel#lastModified()の返値である配列のサイズより確認する。
  • (0, 0)の状態が数字であることをModel#isNumberAt()で確認する。
  • (0, 0)の状態がNumberStateであることをModel#getCurStateAt()で確認する。
  • (0, 0)の状態が3であることをNumberState#getValue()で確認する。
テストケース:単一選択位置に入力ー成功2
テスト内容単一選択された位置に現在とは異なる数字を入力する。その2。
入力データ(0, 0)に5を入力する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ9X7の盤面を作成する。
  • (0, 0)を選択状態にする。
  • (0, 0)に3を入力する。
  • 盤面の変更をリセットする。
テストシナリオ
  • (0, 0)が数字状態であることをModel#isNumberAt()で確認する。
  • (0, 0)の状態がNumberStateであることをModel#getCurStateAt()で確認する。
  • (0, 0)に3が入力されていることをNumberState#getValue()で確認する。
  • (0, 0)が選択状態であることをFilloChangeHandler#isActivePos()[pp]で確認する。
  • 5の入力が妥当であることをFilloChangeHandler#velifyInputRange()[pp]で確認する。
  • (0, 0)にChangeHandler#notifyInputOccured()で5を入力する。
  • 盤面が変更されていることをModel#isModified()で確認する。
  • 変更箇所が1箇所であることをModel#lastModified()の返値である配列のサイズより確認する。
  • (0, 0)の状態がNumberStateであることをModel#getCurStateAt()で確認する。
  • (0, 0)の状態が5であることをNumberState#getValue()で確認する。
テストケース:単一選択位置に同一数字を入力
テスト内容単一選択された位置に現在と同じ数字を入力する。
入力データ(0, 0)に4を入力する。
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • サイズ9X7の盤面を作成する。
  • (0, 0)を選択状態にする。
  • (0, 0)に4を入力する。
  • 盤面の変更をリセットする。
テストシナリオ
  • (0, 0)が数字状態であることをModel#isNumberAt()で確認する。
  • (0, 0)の状態がNumberStateであることをModel#getCurStateAt()で確認する。
  • (0, 0)に4が入力されていることをNumberState#getValue()で確認する。
  • (0, 0)が選択状態であることをFilloChangeHandler#isActivePos()[pp]で確認する。
  • (0, 0)への4の入力が、現在の状態と同じであることをFilloChangeHandler#isSameNumber()[pp]で確認する。
  • (0, 0)にChangeHandler#notifyInputOccured()で4を入力する。
  • 盤面が変更されていないことをModel#isModified()で確認する。
  • 変更箇所が0箇所であることをModel#lastModified()の返値である配列のサイズより確認する。
  • (0, 0)の状態がNumberStateであることをModel#getCurStateAt()で確認する。
  • (0, 0)の状態が4であることをNumberState#getValue()で確認する。

ユースケース:問題のロード

ユースケースのシナリオとして定義した、2つの問題のロードをベースにテストケースを定義した。

テストケース:問題のロード1
テスト内容盤面サイズとは異なるサイズの問題を読み込ませる。
入力データ サイズ5X4、問題" s 2 s s 3 2 s s s s s s s s s 4 s s s 1"
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • FilloProblemLoaderを作成する。
  • Model#createBoard()でサイズ4X5の盤面を作成する。
  • (3, 1)を選択状態にする。
  • 盤面の変更をリセットする。
テストシナリオ
  • ProblemLoader#loadProblem()で問題を読み込む。
  • 盤面が変更されていることをModel#isModified()で確認する。
  • 20箇所変更されたことをModel#lastModified()の返値である配列サイズから確認する。
  • (0, 0)がアクティブポジションであることをFilloChangeHandler#isActivePos()[pp]で確認する。
  • (0, 0)の状態が[Active Pos -> [Space]]であることを確認する。
  • (4, 3)の状態が[Number(1)]であることを確認する。
テストケース:問題のロード2
テスト内容現在のサイズと同じサイズの問題を読み込む。
入力データサイズ:4X5、問題" 4 s 2 s s s s 2 s s s s s s s s 1 s s 3"
準備
  • 状態遷移マネージャを初期化する。
  • SelectionModelでラップしたBoardModelを作成する。
  • FilloChangeHandlerを作成する
  • FilloProblemLoaderを作成する。
  • Model#createBoard()でサイズ4X5の盤面を作成する。
  • (3, 1)を選択状態にする。
  • 盤面の変更をリセットする。
テストシナリオ
  • ProblemLoader#loadProblem()で問題を読み込む。
  • 盤面が変更されていることをModel#isModified()で確認する。
  • 5箇所変更されたことをModel#lastModified()の返値である配列のサイズから確認する。
  • (0, 0)がアクティブポジションであることをFilloChangeHandler#isActivePos()[pp]で確認する。
  • (0, 0)の状態が[Active Pos -> [Number(4)]]であることを確認する。
  • (4, 3)の状態が[Number(3)]であることを確認する。

prev : [システム設計] up : [目次]


© 2003, Kazuhiko TAMURA All rights reserved.

[W3C validator]