あんなテスト、こんなテスト(this and that about testing)View more presentations from Takuya Tsuchida.
(2011/08/19 追記あり) たとえば、こんなシェルスクリプトを作ってみて、 tsucchi@independent[102]% cat a.sh #!/bin/sh echo "aaa"; で、sh ではなく、Perl で実行してみます。 tsucchi@independent[103]% perl a.sh aaa すると、ふつうにシェルスクリプトとして、実行されます。 perl -cw つけたり、B::Deparse をかけようとすると、Perl として解釈されるっぽいです。 perl コマンドのオプションのつけ方にもよるのかもしれませんが、コンパイルよりも早い段階で、シェルとして解析されているっぽいですねー。ソース読まないと細かいことは分からないですが、こんなののために Perl のソース読むのか??? とりあえず、日本語 perldoc みても、この挙動は書いてなかったし、
0. 前提 0.1 はじめに 以前、Perl のテストについてという記事を書きました。2008年の記事なのですが、現在もそこそこのアクセスがあるようです。 ただ、Test::More がアップグレードされて新しい書き方ができるようになったり、そもそも僕自身のプログラムの書き方が少しずつ変わってきているので、いつまでも古い記事を見てもらうのもどうかな、と思い、2011年バージョンをつくってみました。(ちょっとしか改定してませんが。。。)DB まわりのテストに関しては、また次回。 0.2 対象 Perl は書けるが、Perl のテストコードを書いたことが無い人。 0.3 動作確認環境 % uname -a FreeBSD over.tsucchi.mydns.jp 8.2-RELEASE FreeBSD 8.2-RELEASE #1: Sun Feb 27 23:51:01 JST 2011
Test::More 自動試験をさらに便利にする - Perl入門〜サンプルコードによるPerl入門〜 no_planは、「テストを弱くするのでなるべく避けてください」とドキュメントにあるのですが、何が弱くなるのかよくわからない。 オイラも結構 no_plan 使ってしまうのだけどね、でもホントは良くないんだよね。exit されると、テストが途中で終了しちゃうんだよね。例を作るとこんな感じ。 #!/usr/bin/perl use strict; use warnings; use Test::More "no_plan"; # 以下テスト is( sum(1,2), 3);# => ok is( sum('a', 0), -1); #=> ホントは NG だけど、exit されて上が ok だからテストスイートが通ってしまう # これがテストされる関数。同一ファイル・パッケージにおいてる
前回の続き。 ブクマコメで、id:kits さんより、 STDINは local *STDIN = *DATA; もできそう。 とのご指摘。確かに出来そうなので試してみました。 #!/usr/bin/perl use strict; use warnings; use Test::More "no_plan"; sub add { my $result = 0; while( <STDIN> ) { chomp; $result += $_; } return $result; } { local *STDIN; *STDIN = *DATA; is(add, 3); } __DATA__ 1 2 で、実行。 tsucchi@immature[101]% perl a.pl ok 1 1..1大丈夫みたいです。 Test::Base に慣れている人 追加のモジュールを入れたくない/入れられ
仕事メモ。 インタラクティブなコンソールアプリケーションだと、STDIN/STDOUT を使ったやりとりが発生します。こういうのをテストするときに、いままでは、 { local *STDOUT; open(STDOUT, '>', 'stdout.txt') do_something(); #STDOUT を使う何か close(STDOUT); } open(my $MY_STDOUT, '<', 'stdout.txt'); #... $MY_STDOUT の中身を読み出してテストする みたいな処理を書いて、ファイルの中身でチェックしてました。(STDIN の場合は逆で、入力データをファイルに書いて、捻じ曲げた STDIN をアプリに読ませる)。 ファイルを噛ませるのが嫌だったのと、ちょっとトリッキーなのが気に入らなかったので、モジュールを使ってもうちょっと優雅に(?)書けないかな、と
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く