2009-10-25
To repeat testing with different configuration
構成条件を変えてテストを繰り返したいことがある。
たとえば,XSとPurePerlの両方の実装を持つモジュールなどはそうだし,Any::Mooseを使ったモジュールであれば $ENV{ANY_MOOSE} を変えてテストを繰り返したいと考えるのは当然だ。
この問題は,postamble()*1でMakefileにターゲットを追加することで解決できる。
さて,ここでは,開発者モードのときに $ENV{FOO_PUREPERL}=1 でテストをもう一度繰り返したいものとする。これには,Makefile.PLに以下のように記述すればよい。
# Makefile.PL use inc::Module::Install; # ... if(author_context){ # repeat testing # see also ExtUtils::MM_Any::test_via_harness() my $test_pp = q{$(FULLPERLRUN) -MExtUtils::Command::MM -e} .q{ "do 'author/force-pp.pl'; } .q{test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')"} .q{ $(TEST_FILES)} . "\n"; postamble qq{test_dynamic :: test_pp\n\n} . qq{test_pp :: pure_all\n} . qq{\t} . $test_pp;} # ...
そして,以下のような内容のauthor/force-pp.plを作成する。
# author/force-pp.pl $ENV{FOO_PUREPERL} = 1;
これで,Makefileにtest_ppというターゲットができるため, "make test_pp" でPurePerlモードのテストを実行できる。また,test_ppは通常のテスト(test_dynamic)でも実行されるので,単に "make test" とすると,環境変数に手を加えない状態でテストを行った後にさらにtest_ppも繰り返すようになっている。
なお,テストコマンドを "FOO_PUREPERL=1 $(FULLPERLRUN) ..." としても特に問題はないが,ここでは移植性のためにforce-pp.plを用意してそこで環境変数をセットするようにしている。
(追記)
id:typesterいわく,常にフルテストする必要がないときは,prove経由でテストを行うのがいいそうです。
*1:Module::Installを使う場合とExtUtils::MakeMakerを直接使う場合では若干方法が異なるが,基本的には同じである。
購入: 1人 クリック: 6回
- 12 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=ExtUtils::MakeMaker+test_via_harness&aq=f&aqi=&aql=&oq=
- 5 http://perl.pg-feed.com/data/frame_350061.aspx
- 5 http://pl.pg-feed.com/data/frame_350061.html
- 5 http://reader.livedoor.com/reader/
- 2 http://d.hatena.ne.jp
- 2 http://d.hatena.ne.jp/
- 1 http://74.125.153.132/search?q=cache:yO_TTah8-mMJ:d.hatena.ne.jp/gfx/20081217/1229494219+"Insecure+dependency+in+require+while+running+with"&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja&client=firefox-a
- 1 http://azby.search.nifty.com/websearch/search?cflg=検索&select=1&htmltype=2&chartype=&lang_all=&q=偏差IQ&xargs=&otype=web_azby&web.Unique=doc,host+2&web.Format=&stpos=40&num=10
- 1 http://b.hatena.ne.jp/add?mode=confirm&title=To repeat testing with different configuration - use GFx::WebLog;&url=http://d.hatena.ne.jp/gfx/20091025/1256450662


