はじめに
テストデータを作っていて、
「Aメソッドのテストは成功したのに、そのまま後続処理に流したらBメソッドでデータが消えてしまった」
という経験はありませんか?
私は実際の業務で、同じテーブルを複数のメソッドが利用する処理のテストケースを作成した際に、この問題に悩みました。
今回は、初学者向けに
- なぜ途中でデータが消えるのか
- テストデータをどう作ればよいのか
- マトリクス表はどう考えればよいのか
を、ケーキ作りに例えながら解説します。
よくある状況
例えば、注文テーブルを利用する2つのメソッドがあるとします。
メソッドA:在庫確認を行う
確認するカラム
- 商品ID
- 在庫数
- 確認フラグ
メソッドB:配送準備を行う
確認するカラム
- 契約者ID
- 配送区分
- 削除フラグ
ここでやりがちなのが、
「今テストしたいのはAだから、Aで使うカラムだけ設定すればいい」
と考えてしまうことです。
しかし、そのデータがBに渡ると、Bで必要なカラムが未設定のため、データが除外されてしまう場合があります。
🍰ケーキ作りで考えてみる
少しイメージしやすくするために、ケーキ作りに例えてみます。🍰
A工程(形チェック)
確認する材料
- 小麦粉
- 卵
B工程(味チェック)
確認する材料
- 砂糖
- ミルク
失敗する例
A工程をテストしたいので、
- 小麦粉あり
- 卵あり
だけでケーキを作りました。
すると、
A工程 → 合格
になります。
しかしB工程では、
- 砂糖なし
- ミルクなし
なので不合格になります。
つまり、
「Aのテストデータとしては正しい」
けれど
「システム全体を通すデータとしては不十分」
の状態なのです!!
解決策
考え方はシンプルです。
今テストしたい項目以外は、すべて正常値で固定する
というルールです。
例えばAをテストしたい場合は、
| 小麦粉 | 卵 | 砂糖 | ミルク |
|---|---|---|---|
| ○ | ○ | ○ | ○ |
を基準データとして作成します。
そのうえで、
| 小麦粉 | 卵 | 砂糖 | ミルク | 期待結果 |
|---|---|---|---|---|
| ○ | ○ | ○ | ○ | 正常 |
| × | ○ | ○ | ○ | 異常 |
| ○ | × | ○ | ○ | 異常 |
のように、Aで確認したい項目だけ変化させます。
Bで利用する砂糖とミルクは常に正常値のままです。
実際のテーブルで考える
例えば以下のようなテーブルがあるとします。
ORDER_INFO
| カラム名 |
|---|
| product_id |
| stock_count |
| check_flag |
| contract_id |
| delivery_type |
| delete_flag |
Aメソッド
if(stockCount > 0 && checkFlag.equals("1")) {
// 処理実行
}
Bメソッド
if(contractId != null
&& deliveryType.equals("NORMAL")
&& deleteFlag.equals("0")) {
// 配送処理
}
Aのテストケースを作る場合でも、
contract_id = "C001"
delivery_type = "NORMAL"
delete_flag = "0"
は必ず設定しておきます。
なぜなら、後続のBメソッドが参照するためです。
マトリクス表を作るときの考え方
私が意識しているのは次の3ステップです。
- メソッドごとに参照するカラムを書き出す
- 後続処理で必要なカラムも洗い出す
- テスト対象以外は正常値で固定する
この考え方で作成すると、
「せっかく作ったテストデータが途中で消える」
という問題をかなり防げるようになります。
おわりに
テストケース作成では、今テストしているメソッドだけを見るのではなく、その後の処理まで考えることが大切です。
私はこれをケーキ作りで考えるようにしています。
小麦粉と卵だけで形は作れても、砂糖とミルクがなければ最後の検査は通りません。
テストデータも同じです。
「主役以外の条件は正常値で固定する」
この考え方を覚えておくと、マトリクス表の作成がかなり楽になると思います。
