testing

Config::ENV で各環境で必ず定義すべきキーを定めておく

metacpan.orgちょうどいいデフォルト値が見当たらないので、このキーは各環境で適宜、定義せよ、という風にしたい。interface みたいなかんじ。 use strict; use warnings; use Test::More tests => 2; use Test::Fatal qw(exception); { package My::Config…

テストの妥当性

ソフトウェア開発におけるテストは仕様の表現のひとつという風にも扱われるなど、重要な役割を担う一方で、テスト自体の妥当性の検証や保証は少なくて、こういう不安定な土台の上でいろいろやっていいのか、という気がする。レビューする時には、まずテスト…

テンプレートエンジン Night (#tenight) で「テンプレートの静的解析とリファクタリング」について発表した

テンプレートエンジンNight というイベントで Text::Xslate を使ってテンプレートの静的解析とリファクタリングを行った知見について発表した。 テンプレートエンジンを使ってこういうことができる、というような内容から、テンプレートエンジン作った・作っ…

Foreman で Test::mysqld のようにテスト用のデータベースを起動する

Test::mysqld とは Perl に Test::mysqld というモジュールがある。テストを実行するときに MySQL のインスタンスをよしなに起動してくれる。同じテストスイート (プロジェクト、リポジトリ) を並行して実行する場合、データベースの接続先は同じなので複数…

Sinatra + Sprockets で assets のテスト

config.ru に map "/assets" do run Sinatra::Application.sprockets end とか書いてもテストでは config.ru が暗黙のうちに読まれることはないのでマウントされず必ず 404 になる。テストで使う Rack アプリケーションのインスタンスを渡す際にも map すれ…

dotfiles を正しくインストールできるかテストする + Travis CI でビルドする

aereal/dotfiles · GitHubいわゆる dotfiles, シェルやエディタの設定の類を GitHub に置いてある。リポジトリ下にあるファイルを (ホームディレクトリに) インストールする Rake タスクを定義してあるのだけれど、このタスクが期待した動作をするかテストを…

Perl で RSpec の expect ... change 構文を模倣する

expect.pl sub expect (&@) { my ($effector, $comparator, $state) = @_; my ($before, undef, $after) = map { $_->() } ($state, $effector, $state); cmp_ok $before, $comparator, $after; } sub make_changes (&) { my ($actual) = @_; ("!=", $actual…

Io で Test Anything Protocol に対応する出力をするメソッドを書いた

Test Anything Protocol (TAP) というごく単純なテスト出力の仕様がある。Perl の Test::Harness が起源ではあるけれど、本当に単純なので特定の言語に依らず扱える。Io という、これもまたごく軽量で小さな言語があって、もちろんテストを書きたいのだけれ…

リマインダとしてのテスト

「こういう機能を (将来的に) 実装する」っていうの、いままでTODOとかにベタ書きすることもあったけど、そのままテストケースとして書いたほうがいい気がする。たとえばRSpecだと、describeで検証したい機能をあぶり出してから、さらにcontextで条件を切り…