読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

[ruby] fault_injection.rb をリリースしました。

http://faultinjection.rubyforge.org/

いわゆる fault injection をrubyで行うためのライブラリを作ってみました。特定のメソッドコールで強制的に例外を起こしたり、ファイルと行数を指定して例外を起こしたりできます。fault injectionについては、カーネル読書会での美田晃伸さんの講演が参考になります。emasakaさんのエントリーなど。

現在指定できるのは、

  • ファイル名と行数を指定する場合
  • 特定のメソッドコールのスタックにマッチする場合(下の例)

に、指定した例外を起こすことができます。また、例外発生の確率と上限回数を指定できます。


将来的には、

  • 任意のコードを実行(変数を書き換えるとか)
  • もっと条件を柔軟に指定できるようにする(実行時間によってとか)

などを実装したいです。


実装的には、set_trace_func使いまくりんぐ。

ユニットテストなどで、起こすのが面倒くさいエラー(IOErrorとか)を強制的に起こしてテストできます。coverageを向上させるお役に立てば。Railsとか巨大なコードではまだテストしていません。バグレポート歓迎。

以下サンプルコード。

require 'rubygems'
require 'fault_injection'

class Foo
  def foo
    puts "I love injection"
  end
end

include FaultInjection

# fooメソッドの中のputsで強制的にIOErrorを起こすように設定

inject "Foo#foo > Kernel#puts", IOError, "IO error"

Foo.new.foo #=> IOError
【広告】