38
Test::WWW::Stub Shibuya Perl Mongersテクニカルトーク#17 LT 2015/06/02 @ast_j (GitHub astj / hatena id:astj)

Test::WWW::Stub

  • Upload
    astj

  • View
    1.486

  • Download
    0

Embed Size (px)

Citation preview

Test::WWW::StubShibuya Perl Mongersテクニカルトーク#17 LT 2015/06/02 @ast_j (GitHub astj / hatena id:astj)

HTTPリクエストする

モジュールのテストを安全に

LWPで

Test::WWW::Stub

外部アクセスのモック

use Test::WWW::Stub; !my $stubbed_res = [ 200, [], ['okay'] ]; my $guard = Test::WWW::Stub->register( q<http://example.com/TEST>, $stubbed_res ); !my $ua = LWP::UserAgent->new; !is $ua->get('http://example.com/TEST')->content, 'okay';

"http://b.hatena.ne.jp/hotentry.rss"

qr<http://*[.]hatenablog[.]com/rss>

URI

[ 200, [], 'OK']

sub { [ 200, [], 'OK']; }

res

外部アクセスのブロック

LWP経由の全てのリクエストを塞ぐ

モックされてないリクエストにはdiag

use Test::WWW::Stub; my $ua = LWP::UserAgent->new; !$ua->get('http://example.com/HOGE'); # Unexpected external access: GET http://example.com/HOGE at t/hogehoge.t line XX

類似モジュール

• Test::Mock::LWP

• Mock::LWP::Request

• Test::Mock::LWP::Conditional

• Test::Mock::LWP::Dispatch

• Test::LWP::MockSocket::http

• and more...

useするだけで外部アクセスを塞げる

インターフェースがシンプル

PSGI res/appが使える

Why Test::WWW::Stub

LWP::Protocol::PSGI?

Your Code !

LWP

HTTP����������� ������������������  world

LWP::Protocol::http

LWP::Protocol::PSGI !!!!!

Your Code !

LWP

HTTP����������� ������������������  world

LWP::Protocol::httppsgi app example.com

psgi app *.hatena.ne.jp/*

For "example.com" For "*.hatena.ne.jp/*" OTHERWISE

LWP::Protocol::PSGI !!!!!

Your Code !

LWP

Test::WWW::Stub : PSGI app !

!Handler example.com

Handler *.hatena.ne.jp/*

Handler ...

ALL

No Fallback

出自

Current Status

https://metacpan.org/pod/Test::WWW::Stub

CPANized

https://github.com/astj/p5-Test-WWW-Stub

GitHub

• Version : 0.2

• 元々社内の実用モジュール

    →つかえる (はず)

Loadmap

使いやすくて便利

本体はコンパクトに

• レスポンスを予め取得してfixtureに保存

• LWP以外のHTTP通信モジュールも塞ぐ

• Furl, ...

社内発掘品

• Copyright : Hatena

• License : perl_5

• Maintainer : ASTJ

• Contribution Welcome!!

お試し下さい

ご意見・ご要望・ご感想などもぜひ