Test::Moreを試してみる
30分プログラム、その352。Perlのユニットテストを試してみる。
Test::SimpleとかTest::MoreとかTest::Unitとか多すぎるだろ。第1回 Perlにおけるテストの概要/TAPとは?:Happy Testing Perl|gihyo.jp … 技術評論社あたりを見るかぎりでは、Test::SimpleかTest::Moreが標準的なのかな?
使い方
$ perl counter.pl ok 1 ok 2 - 10回incしたら、値が10増える not ok 3 - わざと失敗してみる # Failed test 'わざと失敗してみる' # at counter.pl line 53. not ok 4 - わざと失敗してみる # Failed test 'わざと失敗してみる' # at counter.pl line 54. # got: '9' # expected: '10' ok 5 - 失敗しても、次のテストは実行される 1..5 # Looks like you failed 2 tests of 5. # proveでサマリ表示 $ prove counter.pl counter....1/? # Failed test 'わざと失敗してみる' # at counter.pl line 53. # Failed test 'わざと失敗してみる' # at counter.pl line 54. # got: '9' # expected: '10' # Looks like you failed 2 tests of 5. counter.... Dubious, test returned 2 (wstat 512, 0x200) Failed 2/5 subtests Test Summary Report ------------------- counter (Wstat: 512 Tests: 5 Failed: 2) Failed tests: 3-4 Non-zero exit status: 2 Files=1, Tests=5, 0 wallclock secs ( 0.02 usr 0.02 sys + 0.04 cusr 0.01 csys = 0.09 CPU) Result: FAIL
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # counter.pl - # # Copyright(C) 2008 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2008/08/21 22:59:10 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; # ------------------------------------------------------------ # テスト対象: カウンタ # ------------------------------------------------------------ package Counter; sub new { my ($class,$n) = @_; bless { 'val'=> $n || 0 },$class; } sub inc { my ($self) = @_; ++$self->{'val'}; } sub dec { my ($self) = @_; --$self->{'val'}; } sub val { my ($self) = @_; $self->{'val'}; } # ------------------------------------------------------------ # テスト対象: カウンタ # ------------------------------------------------------------ use Test::More 'no_plan'; my $counter = Counter->new; ok $counter->val() == 0; $counter->inc() for(1..10); ok $counter->val() == 10,'10回incしたら、値が10増える'; $counter->dec(); ok $counter->val() == 10,'わざと失敗してみる'; is $counter->val(),10,'わざと失敗してみる'; ok $counter->val() == 9,'失敗しても、次のテストは実行される';