Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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-cale...
Perlのテストってどうやるの?● Test::Moreを使う
テスト対象モジュールpackage SomeModule;use strict;use warnings;sub new {  my ($class, %args) = @_;  bless %args, $class;}sub sum {  ...
テスト1 useできる?# t/01_use.tuse strict;use warnings;use Test::More;use_ok(SomeModule);done_testing;$ perl -Ilib t/01_use.tok 1...
テスト2 newできる?# t/02_new.tuse strict;use warnings;use Test::More;use SomeModule;my $obj = SomeModule->new;isa_ok $obj, SomeM...
テスト3 機能は正しく動く?# t/03_sum.tuse strict;use warnings;use Test::More;use SomeModule;my $obj = SomeModule->new;subtest basic =>...
まとめてテスト$ prove -lc tt/01_use.t .. okt/02_new.t .. okt/03_sum.t .. okAll tests successful.Files=3, Tests=5, 0 wallclock sec...
わかったこと● テストには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...
t/01_root.tuse strict;use warnings;use utf8;use t::Util;use Plack::Test;use Plack::Util;use Test::More;my $app = Plack::Ut...
?
t/02_mech.tuse strict;use warnings;use utf8;use t::Util;use Plack::Test;use Plack::Util;use Test::More;use Test::Requires ...
??
WAFのテストってどうやるの?● Plack::Test?● Test::WWW::Mechanize::PSGI?● このモジュール何?● TestからHTTP Request投げて、 Responseで判定してる?● ステータスコード見れば...
WAFのテストってどうやるの?● 掲示板で投稿されたときの動作を考え ると1. 入力値のチェック2. DB更新3. 完了画面へリダイレクト この辺りをどうテストするの?
WAFのテストってどうやるの?● デプロイしたあとのテストは? ○   DotCloudに上げたら動かない、とか● やっぱりテスト書かなきゃだめですよ ね?
Upcoming SlideShare
Loading in …5
×

Perlのテストがわからない

5,826 views

Published on

Published in: Technology
  • Be the first to comment

Perlのテストがわからない

  1. 1. Perlのテストがわからない 細越佑介(@hsksyusk)
  2. 2. 自己紹介● 細越佑介(@hsksyusk)● http://about.me/hsksyusk● SIer● 個人でWebサービスを作ってます● テストしてません……
  3. 3. わからないこと● Perlのテストってどうやるの?● WAFのテストってどうやるの?
  4. 4. Perlのテストってどうやるの?● perl でテストを始めよう!! - Perl Advent Calendar Japan 2011 Test Trackhttp://perl-users.jp/articles/advent-calendar/2011/test/1
  5. 5. Perlのテストってどうやるの?● Test::Moreを使う
  6. 6. テスト対象モジュール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;
  7. 7. テスト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
  8. 8. テスト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
  9. 9. テスト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
  10. 10. まとめてテスト$ 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
  11. 11. わかったこと● テストにはTest::Moreを使う● 対象モジュールが一つでも、テストファ イルは分けてつくるわからないこと● テストファイルの分け方、命名にルール はあるの?
  12. 12. WAFのテストってどうやるの?● テストなんかしない! ○ Amon2をローカルのPlackで動かし て確認 ○ サーバに上げて再度確認 ○ ブラウザ、サーバのログ テストしないでリリースしちゃった (・ω<)てへぺろ☆
  13. 13. Amon2のテストを見てみる● t/00_compile.t01_root.t02_mech.t03_assets.t06_jslint.t07_dotcloud.t08_teng.t
  14. 14. 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ね。
  15. 15. 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;
  16. 16. ?
  17. 17. 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();
  18. 18. ??
  19. 19. WAFのテストってどうやるの?● Plack::Test?● Test::WWW::Mechanize::PSGI?● このモジュール何?● TestからHTTP Request投げて、 Responseで判定してる?● ステータスコード見ればいいの?
  20. 20. WAFのテストってどうやるの?● 掲示板で投稿されたときの動作を考え ると1. 入力値のチェック2. DB更新3. 完了画面へリダイレクト この辺りをどうテストするの?
  21. 21. WAFのテストってどうやるの?● デプロイしたあとのテストは? ○ DotCloudに上げたら動かない、とか● やっぱりテスト書かなきゃだめですよ ね?

×