2011-07-06 12 views
0

私は、Webサービスにデータを送るperlスクリプトを書いています。perlでテストするための偽のHTTPレスポンスオブジェクトを作る方法

webserviceとやりとりすることができるかどうかをチェックするperlスクリプトのシステムテストがありますが、これらはうまく動作しますが、小さな変更を加えるとシステムテストを実行したくない - ユニットを実行したいテスト:

これまでは、実際に問題のURLを呼び出してすべての入力が正しいタイプとフォームであることをテストする前に、単にWebリクエストをインターセプトするインポータのサブクラスを作成しました。 perlスクリプトが指示のための応答を読む必要がある場合を除いて、次のステップに進みます。

私の問題は、私が応答オブジェクトを偽造できないということです。

私は新しいHTTP ::対応 - >を使用して試してみたが、それは私のベストFAKEレスポンスオブジェクトにはどうすればよい

悪いヘッダー引数に文句続けますか?

+0

で遊んで試してみてくださいあなたは私たちは、あなたが間違って何をしているかを見ることができますので、試してみました何私たちを表示します。 :) –

答えて

4

HTTP::Responseオブジェクトをモックする必要はありません。それらは簡単に構築することができます—少なくとも黙っているように簡単にテストにバグを導入する可能性は低いです。使い方を推測するのではなく、ドキュメントを読む必要があります。

もちろんコードでそれらを構築することはできますが、私が過去に何度もやったことは、curlの出力またはアプリケーションに対して行われた文字列化された要求を保存してオブジェクト。

は、これらの–

use warnings; 
use strict; 
use HTTP::Response; 

my $response = HTTP::Response->new(204); 
print $response->as_string; 

my $other = HTTP::Response->parse(join "", <DATA>); 
print $other->decoded_content, $/; 

__DATA__ 
HTTP/1.1 200 OK 
Cache-Control: public, max-age=53 
Content-Type: text/html; charset=utf-8 
Expires: Wed, 06 Jul 2011 19:13:54 GMT 
Last-Modified: Wed, 06 Jul 2011 19:12:54 GMT 
Vary: * 
Date: Wed, 06 Jul 2011 19:12:59 GMT 
Content-Length: 198121 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
    <title>Stack Overflow</title> 
    </head> 
<body class="home-page"> 
    <blockquote>O HAI!</blockquote> 
</body> 
</html> 
+1

+1のために 'あなたはドキュメントを読む必要があります。 –

3

モックオブジェクトを探しているかもしれません - この場合はモックLWPオブジェクトですか?

CPANのTest::Mock::LWPを参照してください。

そのドキュメントは、このような使用方法を示しています。あなたがTest::MockのためにCPANを検索する場合

use Test::Mock::LWP; 

# Setup fake response content and code 
$Mock_response->mock(content => sub { 'foo' }); 
$Mock_resp->mock(code => sub { 201 }); 

# Validate args passed to request constructor 
is_deeply $Mock_request->new_args, \@expected_args; 

# Validate request headers 
is_deeply [ $Mock_req->next_call ], 
      [ 'header', [ 'Accept', 'text/plain' ] ]; 

# Special User Agent Behaviour 
$Mock_ua->mock(request => sub { die 'foo' }); 

を、テストのためのオブジェクトを偽造/あざけるためにかなりの数のモジュールがあります。

関連する問題