branch10480’s blog

Topics that I've learned.

iOSアプリ開発自動テストの教科書 を読んでいく 〜 14 〜

モックの種類

名称 説明
モック 呼び出し結果などを記録する
スタブ 任意の値を返すようにする
スパイ 本物の処理を利用しつつ呼び出しなどの記録のみを行う

常に全てをモック化すべき?

ケースバイケースである。状況によってはいくつかのクラスを結合してテストした方が費用対効果が高い。一般的にはテストピラミッドの観点のように単体テストの重要性が高いが、プロジェクトの状態によって柔軟に対応すべき。

ランダムな順序で実行させる

Xcode10から使える Randomize execution order というオプションを有効にすることで毎回テストメソッドの実行がランダムな順番で行われる。

注意
ランダムな順序になるのはあくまでテストメソッド単位。テストクラスや XCTContext.runActivity() の単位ではない。

コードカバレッジを考える

コードカバレッジとは?

コード網羅率とも呼ばれ、テストなどを実行した時にテスト対象のコードがどれだけ網羅的に実行されたかを測定するもの。

Xcodeで有効にするにはメニューにて

Xcodeメニュー>Editor>Show Code Coverage

を選択する。

1回以上実行された場合は green 、0回の部分は red で表示される。

コード網羅率の測定方法の種類

名称 説明
分網羅(C0) 各文が実行されているか
分岐網羅(C1) 制御構文において、それぞれの分岐方向が実行されたか
条件網羅(C2) 分岐条件のかくこうについて、真、偽の両方実行されたか

例としては以下に x = 1 でテストした場合。
この場合、C0 は網羅しているが、C1, C2 はしていない。

func aaa(x: Int) {
    if x >= 0 {
        print('正の数')
    }
}

> 次回に続く