[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