パルカワ2

PerlとRubyとイチャラブ

データベースのテスト

ふわっとしたタイトル通り、中身はありません。

use strict;
use warnings;
use Test::More;

subtest "A" => sub {
    # DBを扱ったテスト
};

subtest "B" => sub {
    # DBを扱ったテスト
};

done_testing;

こういう感じで書いちゃうと、subtest "B"のテストコードが、subtest "A"に依存するとかよくしちゃう。
そういう事をするとsubtest "A"がいらなくなったから削除するとsubtest "B"がエラー吐くみたいなのが、とてもつらい。

「こういう事起きないように気をつけよう!」みたいなの、ずっと1人だったらそれでいいんだけど、チームで開発してるといつの間にか気をつけよう!は忘れ去られてる事が多い。
だから以下のようにapptestみたいな名前のやつをt::Utilに作って、その中でしかデータが保持されないように最近してます。

use t::Util;

apptest "A" => sub {
    # DBを扱ったテスト
};

apptest "B" => sub {
    # DBを扱ったテスト
    # apptest "A"で作ったデータは、ここではアクセスできない
};

もっといい方法があるよって場合はぜひぜひ教えてください…!

実際に現場で使われているPerlでのウェッブアプリケーションのテストの話は、
soh335 さんが 2013/9/20 15:20〜 YAPC::Asia 2013 で話すようなので、聞きに行くととても捗るハズです。
http://yapcasia.org/2013/talk/show/f43580be-ce70-11e2-9e79-f0896aeab6a4