4

Web サービスと通信する Ruby コマンドライン プログラムを作成しています。Cucumber と Aruba を使用してプログラムをテストしています。問題は、Web サービスから返されるデータを制御する必要があることです。プログラムは一連のユーザー コメントを取得するため、新しいコメントが追加されると頻繁に変更される可能性があります。WebMock を使用して Web サービスのモックを作成しようとしましたが、うまくいきませんでした。これは、Aruba がコマンドライン プログラムを、WebMock の影響を受けない別のプロセスに分割するためです (そのため、実際のWeb サービスと通信していました)。

Cucumber を使用してこのプログラムの出力をテストするにはどうすればよいですか?


編集: Web サービスはストリームを JSON データとして返します。テストに使用するデータのスナップショットをキャプチャしました。簡単に言えば、Web サービスへの実際の呼び出しの代わりに静的データを代用する方法を探しています。

または、この目標を達成するためのまったく別の方法がある場合、私はすべて耳にします.

4

3 に答える 3

0

vcr を使用できます ( https://github.com/vcr/vcrを参照) 。

json レスポンスをフィクスチャに変換します。

アイデアを得ることができるように、Readme の冒頭をコピーします。


require 'rubygems'
require 'test/unit'
require 'vcr'

VCR.configure do |c|
  c.cassette_library_dir = 'fixtures/vcr_cassettes'
  c.hook_into :webmock # or :fakeweb
end

class VCRTest < Test::Unit::TestCase
  def test_example_dot_com
    VCR.use_cassette('synopsis') do
      response = Net::HTTP.get_response(URI('http://www.iana.org/domains/reserved'))
      assert_match /Example domains/, response.body
    end
  end
end

このテストを 1 回実行すると、VCR は http リクエストを Fixtures/vcr_cassettes/synopsis.yml に記録します。もう一度実行すると、VCR は http 要求が行われたときに iana.org からの応答を再生します。このテストは高速になり (実際の HTTP リクエストは行われなくなりました)、決定論的 (オフラインの場合や iana.org がメンテナンスのためにダウンした場合でも、テストは引き続きパスします) かつ正確です (応答には同じヘッダーとヘッダーが含まれます)。 body は実際のリクエストから取得します)。

于 2013-12-11T16:55:38.867 に答える
-1

コマンド ライン プログラムはパラメーターを受け取るので、任意のサービスを指す引数として URL を受け取るプログラムを作成します。次に、変更されないシード データを使用して、Web サービスのテスト バージョンを作成します。次に、キュウリのテストを作成して、テスト URL でプログラムを呼び出し、期待されるデータに対してテストします。

于 2012-12-04T22:43:14.803 に答える