Test::Continuous

継続的テスト(Continuous Testing)というのに興味を引かれて使ってみる。

上記の紹介ページによると、Continuous Testing を取り入れることによって、締め切りまでに作業完了できる確率が3倍になるとのこと。なんて素敵なんだ!w
で、これを Perl で実現したのが Test::Continuous とのこと。


さっそく install して使ってみる。


今回テストで使用するファイルの構成。

lib/MyTest.pm
t/01test.t


まずは test されるモジュールの作成。ここは簡単に足し算の関数を。

lib/MyTest.pm

package MyTest;

use strict;
use warnings;

sub add {
    my ($x, $y) = @_;

    my $z = $x + $y;
    return $z;
}

1;


それと、このモジュールをテストするためのスクリプト

t/01test.t

use strict;
use warnings;

use lib qw(lib);
use MyTest;

use Test::More tests => 2;

is(MyTest::add(1, 2), 3, '1 + 2');
is(MyTest::add(-3, 5), 2, '-3 + 5');


ここまでは普段どおり。
ここで Test::Continuous の runtests を起動させる。

perl -MTest::Continuous -e runtests


起動すると、Ctrl+C で中断するまで動き続ける。screen で画面を2分割して、片方の画面で runtests の出力を確認しながら、もう一つの画面で lib/MyTest.pm を編集していくと使いやすい。


たとえば、lib/MyTest.pm の、関数 add を以下のように変更して保存すると、runtests が新たな出力を吐き出す。

sub add {
    my ($x, $y) = @_;

    my $z = $x + $y;
    return $x + $y;        #  ここを変更
}

(出力結果)

[MSG]:/home/egawata/perl/Test-Continuous/lib/.MyTest.pm.swp was changed.
[MSG]:/home/egawata/perl/Test-Continuous/lib/MyTest.pm was changed.
ALL PASSED

今回の変更を行っても t/01test.t のテストは正常に通るので、上記のとおり ALL PASSED となる。


もし関数の記述を誤り、テストに通らない状態にしてしまうと、runtests は以下のような出力を行う。

sub add {
    my ($x, $y) = @_;

    my $z = $x - $y;

    return $z;
}

(実行結果)

[MSG]:/home/egawata/perl/Test-Continuous/lib/.MyTest.pm.swp was changed.
2 planned, only 0 passed.
Failed test(s) in t/01test.t: 1 2
 Non-zero exit status: t/01test.t
/home/egawata/perl/Test-Continuous/t/01test.t:
#   Failed test '1 + 2'
#   at /home/egawata/perl/Test-Continuous/t/01test.t line 9.
#          got: '-1'
#     expected: '3'
#   Failed test '-3 + 5'
#   at /home/egawata/perl/Test-Continuous/t/01test.t line 10.
#          got: '-8'
#     expected: '2'
# Looks like you failed 2 tests of 2.

以上のように、モジュールに変更を加えて保存した段階で、修正した内容が正しいかどうかテストしてくれる点は便利でやりやすいかも。