Upload
shoichi-matsuda
View
1.557
Download
4
Embed Size (px)
DESCRIPTION
iOS_LT #7にて発表しました。
Citation preview
Shoichi Matsuda ( @shoma2da ) iOS_LT #7
モックライブラリを使って きちんとユニットテストする
ユニットテスト できてますか?
会社クラス
従業員クラス
iOSエンジニアかどうか
iOSエンジニアは何%?
ユニットテスト?してみる4人の従業員を生成。3人はiOSエンジニア!
iOSエンジニアは75%のはず!
ユニットテストとはユニットテストは、クラスやメソッドというプログラムの最小単位を対象とし、プログラマが行うテストです。 http://dev.classmethod.jp/testing/10_errors_about_unit_testing/
!
単体テスト(ユニットテストと呼ばれることもあります)は、プログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。通常、関数やメソッドが単体テストの単位(ユニット)となります。 http://www.techmatrix.co.jp/quality/validation/unittest.html
?
ユニットテスト?してみる4人の従業員を生成。3人はiOSエンジニア!
iOSエンジニアは75%のはず!
ユニットテスト?してみる4人の従業員を生成。3人はiOSエンジニア!
iOSエンジニアは75%のはず!
このテストの目的は正しく「何%がiOSエンジニアか」を取得できるかどうかのはずです。 しかし従業員クラスの「iOSエンジニアかどうか」の 実装によってテスト結果が変わってしまいます。 つまりテスト対象が2つのクラスになっちゃってます。
きちんとユニットテストするなら①テスト用に継承したダミークラスを用意する。例えば… ・DummyIOsEmployee:必ずiOSエンジニア ・DummyNotIOsEmployee: 必ずiOSエンジニアではない !
②モックライブラリを使う
きちんとユニットテストするなら①テスト用に継承したダミークラスを用意する。例えば… ・DummyIOsEmployee:必ずiOSエンジニア ・DummyNotIOsEmployee: 必ずiOSエンジニアではない !
②モックライブラリを使う
メソッドが多
かったりする
と
大変!!
モックライブラリ
cocoapodsなどで導入
できること返却値を固定!
できることメソッドが呼び出されたかどうかをテスト!
できることクラスメソッドを置き換え!
できること一部分だけモック化!
具体的にはいつ使うの?●基本的にはどんなときでも使えます!→オブジェクトは関連しあって動作しているはず→但し、依存関係やクラスの責務が無茶苦茶だと かなり無理があります。設計から見直しましょう。→View層もテストするか、などはそれぞれの判断が あるでしょう
●ファイル入出力やHTTPリクエストの時は特に効果絶大!!
その他のモックライブラリ
使ったことないので詳細は知りません…
OCMockito LRMocky
Thank you!! きちんとユニットテストしましょう!