Skip to content

Instantly share code, notes, and snippets.

@jiro
Created September 25, 2014 11:47
Show Gist options
  • Save jiro/ebe45fabde1077100e59 to your computer and use it in GitHub Desktop.
Save jiro/ebe45fabde1077100e59 to your computer and use it in GitHub Desktop.
iOS向けライブラリ/アプリのテスト手法

iOS向けライブラリ/アプリのテスト手法について調査した内容。

Mantle 1.5

URL

構成

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

テスト実行

  • TravisCI利用
    • CI用のscriptを定義

補助ツール

  • Expecta
  • Specta

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)
    • guradを利用してファイル変更時のテスト自動化が可能
  • TravisCI利用

補助ツール

  • Expecta

Overline 0.4.0

URL

構成

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

補助ツール

  • OCHamcrest

BrowseOverflow

構成

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

補助ツール

  • なし

参考

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利用
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment