こんにちは!うきょーです! NLTHTTPStubServer を0.4にアップデートしました。
最初にごめんなさいしておかなければいけないことがあります。
0.2.x 系との互換性がありません
ごめんなさい。0.1.x 0.2.x 系でのバグフィックスなどは、半年くらいは受け付けようと思っていますので、気軽にご連絡ください。
NLTHTTPStubServerって何
簡単に言えば、レスポンス登録を動的にできるHTTPサーバー for iOSです。 HTTP通信をするiOSアプリはたくさんあると思うのですが、これのテストを書く為に開発されました。
仕組みとしては結構単純で、ローカルにHTTPサーバーを立てて、そこにレスポンスを登録し、アプリ(HTTPClient)でそこへアクセスする、という感じです。
例えば /api/v1/fake
は fake.json
を返してほしい、というケースであれば、
1
|
|
という風に記述すると、クライアントからここにアクセスしたときに、fake.json
が返されます。
NSURLConnectionを使って書くと、
1 2 3 4 5 6 |
|
このようにhttp://localhost:12345/api/v1/fake
へアクセスすると、fake.json
が返ってきます。
カテゴリを使ってレスポンスを入れ替えたりするライブラリなんかもありますが、それと比べて、副作用が起こりにくいのが特徴です。 またモックを差し込む、という行為を必要とせず、APIのエンドポイントを入れ替えるだけでよいので、実装自体に手をいれる必要もほとんどありません。
セットアップ
Cocoapodsでのセットアップが簡単です。
1
|
|
NLTHTTPStubServer.h
をインポートして使います。
1
|
|
機能
サーバーの取得
テスト用サーバーは sharedServer
でインスタンスを取得することができます。
1
|
|
clear
で登録されているレスポンスをすべて削除し、綺麗な状態にすることができます。
1
|
|
tearDown
などでお使いください。
expect / stub /verify
0.2.x まででサポートされていたstub
が廃止されました。stub
というAPIは存在しますが、動作が異なっています。
expect
expect
はレスポンスを登録する一般的な方法です。
1
|
|
このように記述すると、/path
へレスポンスが登録されます。
これに対して、メソッドチェインの形式で、必要なものを付加していきます。
1
|
|
expect
で登録されたレスポンスは、一度アクセスを受けてそれが返されると、自動的に消化さた状態になります。
/path
へ二度アクセスしても、レスポンスは返されません。(例外が投げられます。)
verify
expect
されたものは、verify
によって、それが利用されたかを検証することができます。
1 2 3 4 5 |
|
stub
stub
はexpect
と同じインターフェイスを持ちますが、永続的に登録されるレスポンスです。
1
|
|
これは http://localhost:12345/path
へアクセスを受けそれが返されても、消化された状態になりません。
また、verify
による検証では、stub
で登録されたものは無視されます。
NLTPath
NLTPath
は複雑なURLを表現するために使われる物で、現状では特にGETパラメーターに対応するための機能です。
1 2 3 4 |
|
このような記述をした場合、このレスポンスは /fake?k1=v1&k2=v2
または /fake?k2=v2&k1=v1
にマッチします。
anyValue
[NLTPath anyValue]
を使う事で、値部分をワイルドカードにすることができます。
1 2 3 |
|
これは、/fake?k1=hogeeeeeeee
や /fake?k1=fugaaaaaaaaaa
にマッチします。
付加可能な項目
メソッドチェインにより付加できる事ができる項目は以下です。
HTTP Method
1
|
|
Status code
1
|
|
Simulate waiting
タイムアウトなどを再現することができます。
1
|
|
Checking POST body
POSTされた内容を調べる事が出来ます。
1 2 3 4 |
|
Supporting Content-Types
自動的にContentTypeを付加してくれるものは以下です。
1
|
|
- JSON
- HTML
- XML
- Plain Text
- Binary
- application/octet-stream
カスタムのContent-Typeは、andContentTypeHeader
によって付加することができます。
バグなどの報告
Github Issueで受け付けています。(日本語可)