ssk blog

バンコクで働くエンジニアのメモ

テスト駆動開発とiOS(Swift)のテスト(XCTest)を見やすくするためのTIPS

テスト駆動設計

テスト駆動設計って知っていますか?
テスト駆動設計を知らない人は、この本やスライドを見てください
t-wada.hatenablog.jp

www.slideshare.net



テストって重要ですよね。
わかっているんです。重要なことは。
でも全然書いてないんです。


先日、テスト駆動開発の著者(t_wadaさん)の研修を受ける機会があり、演習でテスト駆動を体感しました。(初めてiOSでテストを書きました)

感想

- テストから実装をすると格段に綺麗なコードが書ける
- テストから書くと言語仕様の理解が深まる
- 仕様の分解が必要なので仕様の理解が深まる
- テストが成功すると気持ち良い!Green!快感!
- 他の人がテストだけ見れば仕様がわかるので良いかも(ちゃんとやれば)



最初はテスト駆動開発なんて「何を言っているんだ。現実的なやり方じゃない」って思っていましたが、会社の規模やフェーズ/バグの影響度によっては、「テスト駆動開発って良いかもな」に変わりました。
iOSの場合、すべてをテスト駆動開発でするのは難しいですが、「テスト駆動開発って良いかもな」って考えを持ち、テストへの意識が変わったのが個人的には良かったと思っています。


iOS(Swift)のテスト(XCTest)を見やすくするためのTIPS

テストを見ただけで仕様がわかったほうが良く、そのためのTIPSになります。

お題

- 2の倍数か判定する
- 5の倍数か判定する
- 7の倍数か判定する

どっちが見やすいですか?
パターン① パターン②
f:id:ssktm:20171117203656p:plain f:id:ssktm:20171117203707p:plain


僕はパターン②が圧倒的に見やすいと思います。
f:id:ssktm:20171117204119p:plain

以下を意識

何をするテストか
 - 具体的なテスト
 - 具体的なテスト

パターン②の書き方

方法は、クラスで分ける。
とても簡単でした。(他の人に教えてもらいました)

import XCTest
@testable import SampleTest

class _2の倍数を比較するメソッド: XCTestCase {

    func test_isMultipleOf2メソッドに2を代入するとtrueが返ってくる() {
    }
    
    func test_isMultipleOf2メソッドに3を代入するとfalseが返ってくる() {
    }
}

class _5の倍数を比較するメソッド: XCTestCase {

    func test_isMultipleOf5メソッドに5を代入するとtrueが返ってくる() {
    }

    func test_isMultipleOf5メソッドに6を代入するとfalseが返ってくる() {
    }

}

class _7の倍数を比較するメソッド: XCTestCase {

    func test_isMultipleOf7メソッドに7を代入するとtrueが返ってくる() {
    }

    func test_isMultipleOf7メソッドに8を代入するとtrueが返ってくる() {
    }

}


このTIPSを気に入ったら使って見てください。