Hatena::Grouprubyist

Rubyist til i die

 | 

Tue Nov 20 2007 Test::Unit::TestCase#setupの使い方について

[]Test::Unit::TestCase#setupの使い方について 08:05 はてなブックマーク - Test::Unit::TestCase#setupの使い方について - Rubyist til i die

setupイラネ。

  • たしかにDRYにはなるけど、テストメソッドのみだとテストは完結しない。
  • setupを実行する必要がないのに実行してしまうことがある。
  • テストが長くなると、最悪、setupに気付かないでテストを書いてしまうことがある。
  • 長いsetupが必要になってきたらリファクタリングすべきという警報だ。
  • one assertion per testを実践してたらsetupなどそもそも不要。

setupは不要だが、teardownについては述べていないようだ。後片付だからsetupと違ってそこにテストを理解する情報がないってことなのかな。

ひとつのテストメソッドにはひとつのassert文、そしてEmacsサポート - ’(rubikitch wanna be (a . lisper))

でっかいファイルを処理して情報を取り出すようなクラスを書くと、個々のメソッドのテストにいちいちヒアドキュメントとか書いていられないので、setupで一発ドカンとでっかいファイルをTempfileオブジェクトにputsしておいて使ったりしますが、そういうのはマズいでしょうか?

いや、マズいというかsetupてテストメソッド毎に実行されるので、setupに書いておいてさえかなりの負荷になるし、one assertion per testなんてもうムッキーと叫ぶくらい遅くなってしまうので絶対できない。

なんかこう、でっかいファイルは一回書いておいて後のテストでは使いまわし、っていうのがいいのだと思うけれど、どうやって実現すればいいのかいまいち分からない。ソースコードに別途含めておくのがいいのかな。みなさんどうしてますか。

クラス変数という解法

rubikitchさんからお返事。ありがとうございます。

テストメソッドの外に書いて定数だかクラス変数だかに入れておく。Railsでもfixtureをテストメソッドの外に書いては複数のテストメソッドで共有している。

class FooTest < Test::Unit::TestCase
  @@large_data = LargeData.new("arg")

  def test_xxxx
    # ...
  end
end
ひとつのテストメソッドにはひとつのassert文、そしてEmacsサポート - ’(rubikitch wanna be (a . lisper))

なるほど、それなら処理は1回ですみますね。そこでヒアドキュメントしておけば、テスト自体と離れて困ってしまうこともないか。ふうむ。勉強になります。

CharChar 2011/09/08 06:20 I see, I suppsoe that would have to be the case.

sijjtvsijjtv 2011/09/08 16:34 oaATr6 <a href="http://ldrantejphja.com/">ldrantejphja</a>

yoispoixplbyoispoixplb 2011/09/08 21:10 8kfdHH , [url=http://fjgonpqfbnaa.com/]fjgonpqfbnaa[/url], [link=http://idcjmksnteph.com/]idcjmksnteph[/link], http://bsruklyerrlt.com/

oixlryrvwoixlryrvw 2011/09/10 19:16 UnBqMn <a href="http://mhczaanlvopv.com/">mhczaanlvopv</a>

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/k3c/20071120
 |