テストケースを記述する(1)

Jython で作成した)既存のモジュール hexagon.py を再利用しながら、新たなモジュールの動作を検証するために、テストケースを作成します。

class ExWindow(Window):
    def init(self):
        target = "tabControl", "button",
        self._Controls(target)

        self.items = {}
        for e, mino in TestCase():
            self.items[e] = mino
            item = TabItem(Header=e)
            self.tabControl.Items.Add(item)            
            panel = Canvas()
            item.Content = panel
            self.addMino(panel, mino)

        self.tabControl.SelectionChanged += self.selectionChanged
        self.button.Click += self.click

ジェネレーター TestCase によって、10種類のテトリミノが得られます。

    def selectionChanged(self, sender, e):
        self.mino = self.items[sender.SelectedItem.Header]
        self.button.Content = self.state()

任意のタブを選択すると、各テトリミノの状態がボタンに表示されます。

   def click(self, sender, e):
        self.mino.rotateClockwise()
        sender.Content = self.state()

ボタンをクリックすると、テトリミノが(時計回りに)回転 rotateClockwise して、その状態が再表示されます。

class TestCase:
    types = "COpbYZLIJS"

    def __iter__(self):
        m = self.items()
        for e in self.types:
            yield e, m[e]

    def items(self):
        return dict((e, eval("Tetrimino%s(4, 4)"%e.upper()))
            for e in self.types)

10種類のテトリミノを生成するだけで、その扱いはクライアントに委ねます。


《Note》 第1章で紹介した、 Iterator パターンを実践しています。話が横道に逸れるのは、第7章で取り上げるテストケースが、各章の内容の再確認を兼ねているからです。そのため、プログラム(完成されたゲーム)には興味があっても、プログラミングに興味のないみなさんには、焦れったい思いがするかもしれません。プログラミングに関する部分は読み飛ばして、先にプログラムだけを読み進むのも自由です。その意味でも第7章は、読者のみなさんが「プロダクト指向」か「プロセス指向」かを映し出す鏡になるかもしれません。□


Previous|3/36|Next