後から読み解くのが難しいパラメタライズドテストやデータ駆動テストができるまで
テスト対象をステートレスにするといいことがある、というより、ステートフルだと困ることがある。 問題はテスト対象がステートフルな場合。
シナリオ
- 最初は例示ベースで状態をテストコードに埋め込んでいる
- 隠れていた事前状態が見つかったりして、だんだん例示の部分が巨大化してくる
- 例示の部分をフィクスチャーとして別の関数に分離したくなる
- フィクスチャーに分離した関数は冗長な記述が多くなりがちで、JSONやYAMLやXMLなどデシリアライズの容易な形式でテストコードの外にファイルとして置きたくなる
- この辺で、事前状態と事後状態が離ればなれになることが多い
- 後から読み解くのが難しいテストはこのように生まれている
考察
フィクスチャーが肥大化するのは、例示だけで表現しきれない組み合わせが発生しているからだと思う。 なので、フィクスチャーを外部ファイルにしたくなるタイミングで踏みとどまるべきだ。 比較的見通しのよいデシジョンテーブルを整備して、デシジョンテーブルからフィクスチャーを生成するアプローチへ切り替えた方がいい。 なお、デシジョンテーブルにすると、それぞれの因子の値域を定義したくなるので、それはそれで深入りしそうな場面でもある。