人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Ruby でウェブサービス API のクライアントライブラリを作っています。テストを書こうとしてふと思ったのですが、そのままテストを書くとユニットテストを実行するたびに API にアクセスすることになります。ダミーデータを使ってテストができるように、ネットワークアクセス(HTTP)をシミュレートするモックライブラリはないでしょうか。

●質問者: nuna
●カテゴリ:コンピュータ インターネット
✍キーワード:API HTTP Ruby アクセス ウェブサービス
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● sukiyaki22
●23ポイント

ふつうはローカルに環境をインストールするんではないですか?http://end

◎質問者からの返答

環境というのは具体的にどういう意味でしょうか。

質問が曖昧でしたかね。すみません。

例えばYahoo!の日本語形態素解析Webサービスのクライアントライブラリを作るとします

(今作っているのは別ですが)。

http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html

Net::HTTPとREXMLを使えばできますけど、

XMLをパースして必要な値を取り出す部分が面倒なので、

そこを面倒みてくれるライブラリ化します。

ウェブサービスAPIのクライアントライブラリは大体同じです。

そのライブラリのユニットテストを書くわけですが、

テストを実行するたびにリクエストURL(http://api.jlp.yahoo.co.jp/MAService/V1/parse)に

アクセスせずに済ませたいと思っています。

クライアントライブラリには手を入れずに実現したいので、

Net::HTTPを差し替えて実際にネットワークアクセスをせずに

ダミーデータを返すようなのがあればと思いました。

と、ここまで書いて「ローカルに環境をインストール」から思いついたのですが、

WEBrickでダミーデータを返すウェブサーバを書いて、テスト時に稼動させればよいですね。


2 ● KUROX
●23ポイント

APIを直接使わずにアクセスの部分をすべてラッピングする

あとはフラグがなにかでテストモードかそうでないかを

判断する。ラッピング関数はそのフラグをみて、ダミーのデータを

返却する。

こんなのでうまくいくかどうかは自信がないが、

うまく言ったこともあった。

http://q.hatena.ne.jp/answer

◎質問者からの返答

ありがとうございます。なるほどそういう方法もありますね。後出しで申し訳ないのですが、クライアントライブラリのコードには手を入れずにテストできるようにしたいので、今回は別の手段を模索します。すみません。


3 ● moro
●22ポイント

http://mocha.rubyforge.org/

railsのテストでも使っているらしいmochaはいかがでしょう。

例えば、以下のようなテストコードで書けるようです。

class TestMyProduct < TestUnit::TestCase
def setup
 xml = REXML::Document.new File.read("data/sample.xml")
 MyAgent.expect(:get).return(xml)
end

def test_xxx
 ..

で、プロダクション。

class MyProduction
 def xxx
 result = MyAgent.get("http://example.com/api/hoge")
 ...
 end
end

この場合、Net::HTTPを使ってアクセスする部分のラッパMyAgentを(できるだけシンプルに)書き、それをモックする形で使用してます。

モックを返すモックを返すモック、、、とかを作ろうとするとさすがに泣けるので。

あと私は、普段はRSpecのモック/スタブを使ってるからです。

テストコードがtest/unitとまったく違うので既存分への適用は難しいと思いますが、興味があるようでしたらお試しください。

http://rspec.rubyforge.org/

こちらはモックやスタブ機能を含めた統合BDDフレームワークです

◎質問者からの返答

書き方が面白いですね。ちょっと試してみます。ありがとうございます。


4 ● minkpa
●22ポイント

http://d.hatena.ne.jp/devbankh/

◎質問者からの返答

ありがとうございます。勉強になりました。スタブとモックを混同してました……

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ