データ駆動 + Test::Unit

大量のログデータの処理の前段階として、fluentプラグインで処理させるときのこと。

fluentプラグインのテストはTest::Unitで書くのが主流なようで、Test::Unitを書いている。 ただ、プラグインは大量のデータを処理するので、テストケースの量も多くなってしまう。

何かいい方法はないかと思っていたら、データ駆動でのテストが書ける機構が備わっているのがとても便利だと感じた。

data(
  "case" => ["expected", "target test data"],
  ...
)
test "it's a data driven test" |data|
  expected, target = data
  assert_equal(expected, SUT(target))
end

test メソッドを使ったDSL syntaxでもブロック引数に渡せるのでこのように書ける。 テストするデータ量が多いと、 each を回すような書き方になって見通し悪くなるが、この書き方だととてもスマートに表現できる。

やるじゃん、Test::Unit。