19
Shoichi Matsuda ( @shoma2da ) iOS_LT #7 モックライブラリを使って きちんとユニットテストする

モックライブラリを使ってきちんとユニットテストする #Objective-C

Embed Size (px)

DESCRIPTION

iOS_LT #7にて発表しました。

Citation preview

Page 1: モックライブラリを使ってきちんとユニットテストする #Objective-C

Shoichi Matsuda ( @shoma2da ) iOS_LT #7

モックライブラリを使って きちんとユニットテストする

Page 2: モックライブラリを使ってきちんとユニットテストする #Objective-C

ユニットテスト できてますか?

Page 3: モックライブラリを使ってきちんとユニットテストする #Objective-C

会社クラス

従業員クラス

iOSエンジニアかどうか

iOSエンジニアは何%?

Page 4: モックライブラリを使ってきちんとユニットテストする #Objective-C

ユニットテスト?してみる4人の従業員を生成。3人はiOSエンジニア!

iOSエンジニアは75%のはず!

Page 5: モックライブラリを使ってきちんとユニットテストする #Objective-C

ユニットテストとはユニットテストは、クラスやメソッドというプログラムの最小単位を対象とし、プログラマが行うテストです。 http://dev.classmethod.jp/testing/10_errors_about_unit_testing/

!

単体テスト(ユニットテストと呼ばれることもあります)は、プログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。通常、関数やメソッドが単体テストの単位(ユニット)となります。 http://www.techmatrix.co.jp/quality/validation/unittest.html

Page 6: モックライブラリを使ってきちんとユニットテストする #Objective-C

Page 7: モックライブラリを使ってきちんとユニットテストする #Objective-C

ユニットテスト?してみる4人の従業員を生成。3人はiOSエンジニア!

iOSエンジニアは75%のはず!

Page 8: モックライブラリを使ってきちんとユニットテストする #Objective-C

ユニットテスト?してみる4人の従業員を生成。3人はiOSエンジニア!

iOSエンジニアは75%のはず!

このテストの目的は正しく「何%がiOSエンジニアか」を取得できるかどうかのはずです。 しかし従業員クラスの「iOSエンジニアかどうか」の 実装によってテスト結果が変わってしまいます。 つまりテスト対象が2つのクラスになっちゃってます。

Page 9: モックライブラリを使ってきちんとユニットテストする #Objective-C

きちんとユニットテストするなら①テスト用に継承したダミークラスを用意する。例えば… ・DummyIOsEmployee:必ずiOSエンジニア ・DummyNotIOsEmployee: 必ずiOSエンジニアではない !

②モックライブラリを使う

Page 10: モックライブラリを使ってきちんとユニットテストする #Objective-C

きちんとユニットテストするなら①テスト用に継承したダミークラスを用意する。例えば… ・DummyIOsEmployee:必ずiOSエンジニア ・DummyNotIOsEmployee: 必ずiOSエンジニアではない !

②モックライブラリを使う

メソッドが多

かったりする

大変!!

Page 11: モックライブラリを使ってきちんとユニットテストする #Objective-C

モックライブラリ

Page 12: モックライブラリを使ってきちんとユニットテストする #Objective-C

cocoapodsなどで導入

Page 13: モックライブラリを使ってきちんとユニットテストする #Objective-C

できること返却値を固定!

Page 14: モックライブラリを使ってきちんとユニットテストする #Objective-C

できることメソッドが呼び出されたかどうかをテスト!

Page 15: モックライブラリを使ってきちんとユニットテストする #Objective-C

できることクラスメソッドを置き換え!

Page 16: モックライブラリを使ってきちんとユニットテストする #Objective-C

できること一部分だけモック化!

Page 17: モックライブラリを使ってきちんとユニットテストする #Objective-C

具体的にはいつ使うの?●基本的にはどんなときでも使えます!→オブジェクトは関連しあって動作しているはず→但し、依存関係やクラスの責務が無茶苦茶だと かなり無理があります。設計から見直しましょう。→View層もテストするか、などはそれぞれの判断が あるでしょう

●ファイル入出力やHTTPリクエストの時は特に効果絶大!!

Page 18: モックライブラリを使ってきちんとユニットテストする #Objective-C

その他のモックライブラリ

使ったことないので詳細は知りません…

OCMockito LRMocky

Page 19: モックライブラリを使ってきちんとユニットテストする #Objective-C

Thank you!! きちんとユニットテストしましょう!