LoginSignup
48
47

More than 5 years have passed since last update.

iOS向けライブラリ/アプリから学ぶ単体テスト

Last updated at Posted at 2014-09-25

iOS向けライブラリ/アプリの単体テスト手法について調査した内容のメモ。(Objective-C前提です、、)

Mantle 1.5

URL

構成

  • すべてSpectaを利用した記述
    • Specta開発元なのでSpecta利用の参考になる
  • 環境定義用クラスはなし
    • pchファイルで補助ツールのインポート

テスト実行

  • TravisCI利用
    • CI用のスクリプトを定義

補助ツール

  • Expecta
  • Specta

Octokit 0.5

URL

構成

  • すべてSpectaを利用した記述
    • Specta開発元なのでSpecta利用の参考になる
  • OCTClientSpecで通信スタブのOHHTTPStubsを利用
    • 通信の設定を簡略化させるblocks定義あり
  • 環境定義用クラスはなし
    • pchファイルで補助ツールのインポート

補助ツール

  • Expecta
  • Specta
  • OHHTTPStubs

AFNetworking 1.3.4

URL

構成

  • 環境定義用クラス AFNetworkingTests.h/.m
    • 補助ツールのインポート
    • loadメソッドのオーバーライド
    • ログ出力の設定
  • プロトコル用のモック定義

テスト実行

  • TravisCI利用
    • rakeでコマンド定義

補助ツール

  • Expecta
  • OCMock

RestKit 0.23.3

URL

構成

  • RestKit自体にテスト用クラス群あり <RestKit/Testing.h>
  • 環境定義用クラス RKTestEnvironment.h/.m
    • TestCaseクラスのサブクラス RKTestCase を定義
    • 各テストは RKTestCase クラスのサブクラスで定義
    • initializeメソッドをオーバーライド
    • 補助ツールのインポート
    • フィクスチャのバンドル定義
    • ディレクトリの存在チェック
    • モデルからテストファクトリ作成
  • フィクスチャ
    • 画像
    • JSON
    • XML
  • 簡易的なモデルオブジェクトクラス定義
    • テストファクトリの作成に利用
  • Spectaの利用は局所的
    • RKResponseDescriptorTest のみ
  • テストごとにライブラリの利用などが異なる

テスト実行

  • rakeでテストサーバーの制御とテスト実行を管理
    • sinatoraをテストサーバーとして利用

補助ツール

  • OCHamcrest 3.0.1
  • Expecta 0.3.1
  • OCMock 2.2.1
  • Specta 0.2.1

iOctocat 1.8.1.7

URL

構成

  • 環境定義用クラスはなし
    • pchファイルで補助ツールをインポート
    • pchファイルでアプリで利用する定数定義ファイルをインポート
  • ヘルパークラス IOCTestHelper.h/.m を定義
    • フィクスチャ利用のためのヘルパーメソッド
  • フィクスチャ
    • JSON

テスト実行

  • テスト実行のためのスクリプトあり (ruby)
    • guardを利用してファイル変更時のテスト自動化が可能
  • TravisCI利用

補助ツール

  • Expecta

Overline 0.4.0

URL

構成

  • カテゴリ拡張のメソッドに対するテスト

補助ツール

  • OCHamcrest

BrowseOverflow

構成

  • Model, View Controller, Data Source, Delegateのテストあり
  • モックやスタブは自前で実装

補助ツール

  • なし

参考

気付いたこと

  • テストに慣れ親しみたいのなら、カテゴリを拡張したライブラリ(Overlineなど)から眺めてみるのが良さげ
  • Spectaを使いたいなら、MantleOctokitを眺めてみるのが良さげ
  • 非同期テストも簡単にやりたいならExpectaか

AFNetworking 1.3.4 のテスト内容の一部

  • AFHTTPRequestOperationTests.m
    • (区分けなし)
      • 成功時に成功用の完了ブロックが実行されレスポンスオブジェクトを受け取れること
      • 失敗時に失敗用の完了ブロックが実行されエラーを受け取れること
      • リクエストをキャンセルするとキャンセルのエラーがセットされること
      • リクエストをキャンセルすると失敗用の完了ブロックが実行されること
      • 500ステータスコードによる失敗時に失敗用の完了ブロックが実行されエラーを受け取れること
      • 302ステータスコードの遭遇によりリダイレクト用のブロックが実行されること
      • 複数回の302ステータスコードの遭遇によりリダイレクト用のブロックが複数回実行されること
    • 停止
      • 停止ができること
      • 停止後に再開ができること
      • 停止から再開後に完了ブロックが実行されること
    • レスポンス文字列のエンコード
      • 文字パラメータが提供されない際に文字列エンコードがISOLatin1であること
      • SiftJISの文字パラメータが提供された際に文字列エンコードがShiftJISであること
      • 不正な文字パラメータが提供された際に文字列エンコードがUTF-8であること
      • UTF-8の文字パラメータが提供された際に文字列エンコードがUTF-8であること
  • AFHTTPClientTests.m
    • setUpメソッド
      • AFHTTPClientのインスタンスをプロパティへセット
      • イニシャライザのテスト以外はプロパティ経由でインスタンスを取得
    • (区分けなし)
      • イニシャライザメソッドが例外を発生させること
      • イニシャライザメソッドで指定されたパスの末端にスラッシュが追加されること
      • デフォルトの文字列エンコードが意図通りであること
      • デフォルトのパラメータエンコードが意図通りであること
      • デフォルトのヘッダー群が意図通りであること
      • Reachabilityステータスが正しいこと
      • JSONRequestOperationの設定が正しいこと
      • XMLRequestOperationの設定が正しいこと
      • ImageRequestOperationの設定が正しいこと
      • すべてのリクエストが完了した際にエンキューされたバッチの完了ブロックが呼ばれること
      • 不正なユーザー名とパスワードによる認証ヘッダーが意図通りであること
      • 正しいユーザー名とパスワードによる認証ヘッダーが意図通りであること
      • 認証ヘッダーがリセットされること
      • デフォルトのクレデンシャルを利用すること
      • 簡潔な辞書を与えたAFQueryStringFromParametersWithEncodingが意図通りであること
      • 複雑な入れ子のパラメータを与えたAFQueryStringFromParametersWithEncodingが意図通りであること
      • AFQueryStringFromParametersWithEncodingがパーセントエスケープを適用すること
      • cancelAllHTTPOperationsWithMethod:path:メソッドがマッチしたオペレーションのみをキャンセルすること
      • デフォルトの文字列エンコードがUTF-8であること
      • FormURLParameterEncodingを指定してパラメータを与えたPOSTリクエストの生成が意図通りであること
      • JSONParameterEncodingを指定してパラメータを与えたPOSTリクエストの生成が意図通りであること
      • PropertyListParameterEncodingを指定してパラメータを与えたPOSTリクエストの生成が意図通りであること
      • パラメータを与えたPOST通信が意図通りであること
      • enqueueBatchOfHTTPRequestOperations:メソッドが登録したHTTPRequestOperationクラスを適切に利用してオペレーションを構成すること( OCMock利用
      • enqueueBatchOfHTTPRequestOperations:メソッドが正しい順序でオペレーションをエンキューすること( OCMock利用
48
47
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
47