• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Perlのテストがわからない
 

Perlのテストがわからない

on

  • 4,184 views

 

Statistics

Views

Total Views
4,184
Views on SlideShare
4,182
Embed Views
2

Actions

Likes
2
Downloads
7
Comments
0

1 Embed 2

https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Perlのテストがわからない Perlのテストがわからない Presentation Transcript

    • Perlのテストがわからない 細越佑介(@hsksyusk)
    • 自己紹介● 細越佑介(@hsksyusk)● http://about.me/hsksyusk● SIer● 個人でWebサービスを作ってます● テストしてません……
    • わからないこと● Perlのテストってどうやるの?● WAFのテストってどうやるの?
    • Perlのテストってどうやるの?● perl でテストを始めよう!! - Perl Advent Calendar Japan 2011 Test Trackhttp://perl-users.jp/articles/advent-calendar/2011/test/1
    • Perlのテストってどうやるの?● Test::Moreを使う
    • テスト対象モジュールpackage SomeModule;use strict;use warnings;sub new { my ($class, %args) = @_; bless %args, $class;}sub sum { my $self = shift; my $ret = 0; for my $num (@_) { $ret += $num; } return $ret;}1;
    • テスト1 useできる?# t/01_use.tuse strict;use warnings;use Test::More;use_ok(SomeModule);done_testing;$ perl -Ilib t/01_use.tok 1 - use SomeModule;1..1
    • テスト2 newできる?# t/02_new.tuse strict;use warnings;use Test::More;use SomeModule;my $obj = SomeModule->new;isa_ok $obj, SomeModule;done_testing;$ perl -Ilib t/02_new.tok 1 - The object isa SomeModule1..1
    • テスト3 機能は正しく動く?# t/03_sum.tuse strict;use warnings;use Test::More;use SomeModule;my $obj = SomeModule->new;subtest basic => sub { my $got = $obj->sum(1, 2, 3); is $got, 6;};done_testing;$ perl -Ilib t/03_sum.t ok 1 1..1ok 1 - basic1..1
    • まとめてテスト$ prove -lc tt/01_use.t .. okt/02_new.t .. okt/03_sum.t .. okAll tests successful.Files=3, Tests=5, 0 wallclock secs ( 0.10 usr 0.02 sys + 0.20 cusr 0.05 csys = 0.37 CPU)Result: PASS
    • わかったこと● テストにはTest::Moreを使う● 対象モジュールが一つでも、テストファ イルは分けてつくるわからないこと● テストファイルの分け方、命名にルール はあるの?
    • WAFのテストってどうやるの?● テストなんかしない! ○ Amon2をローカルのPlackで動かし て確認 ○ サーバに上げて再度確認 ○ ブラウザ、サーバのログ テストしないでリリースしちゃった (・ω<)てへぺろ☆
    • Amon2のテストを見てみる● t/00_compile.t01_root.t02_mech.t03_assets.t06_jslint.t07_dotcloud.t08_teng.t
    • t/00_compile.tuse strict;use warnings;use utf8;use Test::More;use_ok $_ for qw( fbsample fbsample::Web fbsample::Web::Dispatcher);done_testing; ああ、useね。
    • t/01_root.tuse strict;use warnings;use utf8;use t::Util;use Plack::Test;use Plack::Util;use Test::More;my $app = Plack::Util::load_psgi app.psgi;test_psgi app => $app, client => sub { my $cb = shift; my $req = HTTP::Request->new(GET => http://localhost/); my $res = $cb->($req); is $res->code, 200; diag $res->content if $res->code != 200; };done_testing;
    • ?
    • t/02_mech.tuse strict;use warnings;use utf8;use t::Util;use Plack::Test;use Plack::Util;use Test::More;use Test::Requires Test::WWW::Mechanize::PSGI;my $app = Plack::Util::load_psgi app.psgi;my $mech = Test::WWW::Mechanize::PSGI->new(app => $app);$mech->get_ok(/);done_testing();
    • ??
    • WAFのテストってどうやるの?● Plack::Test?● Test::WWW::Mechanize::PSGI?● このモジュール何?● TestからHTTP Request投げて、 Responseで判定してる?● ステータスコード見ればいいの?
    • WAFのテストってどうやるの?● 掲示板で投稿されたときの動作を考え ると1. 入力値のチェック2. DB更新3. 完了画面へリダイレクト この辺りをどうテストするの?
    • WAFのテストってどうやるの?● デプロイしたあとのテストは? ○ DotCloudに上げたら動かない、とか● やっぱりテスト書かなきゃだめですよ ね?