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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/08/24 14:29:50
  • 終了:2007/08/31 14:30:04

回答(4件)

id:sukiyaki22 No.1

sukiyaki22回答回数299ベストアンサー獲得回数22007/08/25 00:46:39

ポイント23pt

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

id:nuna

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

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

例えば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でダミーデータを返すウェブサーバを書いて、テスト時に稼動させればよいですね。

2007/08/27 01:00:36
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402007/08/25 04:36:39

ポイント23pt

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

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

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

返却する。

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

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

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

id:nuna

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

2007/08/27 01:05:54
id:moro No.3

moro回答回数23ベストアンサー獲得回数102007/08/28 16:57:18

ポイント22pt

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フレームワークです

id:nuna

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

2007/08/29 22:27:17
id:minkpa No.4

minkpa回答回数4178ベストアンサー獲得回数552007/08/27 00:58:22

id:nuna

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

2007/08/29 22:11:52

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません