LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

Organization

mrubyでmrbgemのテストで外部コマンドを使うには

2016/7/23 追記

spec.add_test_dependency 'mruby-io'

というように記述することで、可能になってます。

背景

mrubyで画像処理を行うmruby-mrmagickを作っていて、
画像処理結果のテストをそろそろせねばという事になり、
手っ取り早いのはImageMagickのconvertコマンドなどを動かして
出来た画像と比較すればいいのでは、と考えた。

困ったこと

mrubyは必要なmrbgemsをコンパイルしてmrubyにまとめて、これを使うことにより、
様々な拡張機能を利用できた。

当然、テストの際もこれらの拡張機能が利用できるものと考えていたが、
テストの際はmrubyコマンドが使われることは無いようで、テスト用にはそれぞれのmrbgemsの内部?の機能のみが使用出来る状態のmrubyが動くような感じだった。

解決方法

mrbgemsの依存関係の指定がmrbgem.rakeファイルにて記述出来るので、こちらに

spec.add_dependency 'mruby-io'

を追加した。ビルドの依存関係としては、依存しないのが気になるところであるが、

ありがたいことに



と、呟いたところ、早速


というヒントを頂いたものの、現状の自分のruby力(rakeコマンドはCRubyで動いている理解)では、ハードルが高かったので、
当面このやり方でテストを進めようと思う。

もっと良いやり方あったら是非教えてください。

外部コマンドを使ってテストコード

assert("Mrmagick::Image#scale") do
  `convert -size 640x480 -background "#C0C0C0" -fill "#FFFF00" caption:"ABC" output.png`
  Mrmagick::ImageList.new("output.png").scale(0.5).write("t.png")
  `convert -scale 50% output.png dest.png`
  `composite -compose difference dest.png t.png diff.png`
  t= `identify -format "%[mean]" diff.png`
  assert_equal("0",t)
end

関連投稿

関連記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2