特殊な例外クラスを設計したい場合
http://rucila.s43.xrea.com/memo/?date=20070206#p02
- ある箇所で、ある例外があがること
と
- その例外の状態が xxx であること
はそれぞれ別の検査項目だったりするかもしれないので、そういうときはcontextを分けるのが良いんじゃないかなぁ、と思いました。
どこかで結合させるにしても、例外クラスの振舞(スタックトレースの差替え含む)を考える場合と例外をあげる場合はまぁ一手で書けなくてもゆるそうか、と。
というわけでこんな書き方はいかがでしょ。
context "do_something " do specify "should reraise Myrror" do lambda{ do_something() }.should_raise(MyError) end end context "MyError" do setup do err = mock "Error" msg = "error msg" @bt = ["a", "b"] err.stub!(:message).and_return(msg) err.stub!(:backtrace).and_return(bt) begin reraise(err) rescue @my_error = $! end end specify "backtrace should == bt" do @my_error.backtrace.should == bt end end
setup を厚くして specify は一行かそこらに納めるのが最近の好みです。