SlideShare a Scribd company logo
1 of 21
Download to read offline
Perlのテストがわからない
   細越佑介(@hsksyusk)
自己紹介

●   細越佑介(@hsksyusk)
●   http://about.me/hsksyusk
●   SIer
●   個人でWebサービスを作ってます
●   テストしてません……
わからないこと

● Perlのテストってどうやるの?
● WAFのテストってどうやるの?
Perlのテストってどうやるの?

● perl でテストを始めよう!! - Perl
  Advent Calendar Japan 2011 Test
  Track
http://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.t
use strict;
use warnings;
use Test::More;

use_ok('SomeModule');

done_testing;




$ perl -Ilib t/01_use.t
ok 1 - use SomeModule;
1..1
テスト2 newできる?
# t/02_new.t
use strict;
use warnings;
use Test::More;
use SomeModule;

my $obj = SomeModule->new;
isa_ok $obj, 'SomeModule';

done_testing;




$ perl -Ilib t/02_new.t
ok 1 - The object isa SomeModule
1..1
テスト3 機能は正しく動く?
# t/03_sum.t
use 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..1
ok 1 - basic
1..1
まとめてテスト
$ prove -lc t
t/01_use.t .. ok
t/02_new.t .. ok
t/03_sum.t .. ok
All 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.t
01_root.t
02_mech.t
03_assets.t
06_jslint.t
07_dotcloud.t
08_teng.t
t/00_compile.t
use strict;
use warnings;
use utf8;
use Test::More;

use_ok $_ for qw(
   fbsample
   fbsample::Web
   fbsample::Web::Dispatcher
);

done_testing;




                               ああ、useね。
t/01_root.t
use 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.t
use 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に上げたら動かない、とか
● やっぱりテスト書かなきゃだめですよ

 ね?

More Related Content

What's hot

最新開発支援ツールを使ったデバッグ対応
最新開発支援ツールを使ったデバッグ対応最新開発支援ツールを使ったデバッグ対応
最新開発支援ツールを使ったデバッグ対応
Osamu Monoe
 

What's hot (13)

wankuma #28
wankuma #28wankuma #28
wankuma #28
 
最新開発支援ツールを使ったデバッグ対応
最新開発支援ツールを使ったデバッグ対応最新開発支援ツールを使ったデバッグ対応
最新開発支援ツールを使ったデバッグ対応
 
もしトラ
もしトラもしトラ
もしトラ
 
Beyond JUnit3
Beyond JUnit3Beyond JUnit3
Beyond JUnit3
 
20111006 cakephp2.0 study
20111006 cakephp2.0 study20111006 cakephp2.0 study
20111006 cakephp2.0 study
 
JDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングJDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミング
 
CakeにTestがやってきた
CakeにTestがやってきたCakeにTestがやってきた
CakeにTestがやってきた
 
PHP AV BINDING
PHP AV BINDINGPHP AV BINDING
PHP AV BINDING
 
Laravel shibuya 3 Laravel Beginner IRT
Laravel shibuya 3 Laravel Beginner IRTLaravel shibuya 3 Laravel Beginner IRT
Laravel shibuya 3 Laravel Beginner IRT
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
Tests and bugreports
Tests and bugreportsTests and bugreports
Tests and bugreports
 
Introduction to boost test
Introduction to boost testIntroduction to boost test
Introduction to boost test
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
 

Similar to Perlのテストがわからない

関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
Takuya Tsuchida
 
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Tsutomu Chikuba
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo
 
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
Yohei Sato
 

Similar to Perlのテストがわからない (20)

関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
 
ソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テストソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テスト
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ!
etckeeperをopenSUSEの公式リポジトリに入れたいぞ!etckeeperをopenSUSEの公式リポジトリに入れたいぞ!
etckeeperをopenSUSEの公式リポジトリに入れたいぞ!
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
 
日常業務にperlを使おう
 日常業務にperlを使おう 日常業務にperlを使おう
日常業務にperlを使おう
 
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界
 

Perlのテストがわからない