このまえはまってたやつ、やっぱそういうことみたいだった。
RSpec の it { … } と速度の話 #Ruby #Rspec #Rails - Qiita
it や its 毎に before(:each) と after(:each) が走るため。
なるほど勉強になる。
こうやればいいらしい。
it do @rspec.aaa.should be_true @rspec.bbb.should be_false end
勉強になる。
ただこれだと最後のやつしかログに表示されないのでちょっと悲しい。
putsとか間にはさむといいんだろうか。
いまなやんでるのが、テストの書き方がいまいちわからない。
例えばHashのクラスをテストするとき、ざっくりテスト書くと
- #set
- ハッシュにセット
- #get
- キーの値を取得
- #size
- サイズを返す
- #delete
- ハッシュから削除
- #clear
- ハッシュをクリア
これが出来ればいいとして、setのテストするにはgetができないとダメだし、getのテストするにはsetできないとダメ。
テストするにはセットでやらないと効率良くないので、毎回インスタンス作られるとテストがめんどくさいと思う。
なので引き継がれれば
describe "HashTestのテスト" do before { @hash = HashTest.new } describe "#set & #get" do subject do @hash.set "key", "value" @hash.set "key2", "value2" @hash.get "key" end it { should == "value" } end describe "#size" do subject do @hash.size end it { should == 2 } end describe "#delete" do subject do @hash.delete "key" @hash.get "key" end it { should be_nil } end describe "#clear" do subject do @hash.clear @hash.size end it { should == 0 } end end
みたいな感じで書けるんだけど、ダメなので
describe "HashTestのテスト" do before { @hash = HashTest.new } context "ぜんぶテスト" do it do @hash.set "key", "value" @hash.set "key2", "value2" @hash.get("key").should == "value" @hash.size.should == 2 @hash.delete "key" @hash.get("key").should be_nil @hash.clear @hash.size.should == 0 end end end
みたいな感じになるんだと思う。
ただこれだと
HashTestのテスト ぜんぶテスト should == 0
こんな感じに表示されるのでいまいちな感じがする。
でも厳密には1つ1つまじめにやったほうが信頼性があるのでそうしろってことなんだと思う。