Minitest のRailscastを見たところです。
Rails アプリのテストに RSpec と Minitest を使用する場合の長所と短所は何ですか? RSpec から Minitest に変換すると、どの機能が失われますか?
私は RSpec 開発者の 1 人であり、minitest を使用したことがないため、この回答を読むときは私の偏見を考慮に入れてください。
概して、RSpec のパワーは、非常に多くのテスト概念をファーストクラスのオブジェクトに具体化するという事実から来ています。Test::Unit と Minitest がアサーションを作成するために単純なメソッドを使用するのに対し、RSpec は否定、自己記述などをサポートするファーストクラスのマッチャー オブジェクトを使用します。RSpec の例は、豊富なメタデータをサポートする一流のオブジェクトです。minitest/specit
は、ブロックを単純なメソッドにコンパイルしますが、これは同じ種類のリッチ メタデータをサポートしていません。RSpec は、引数を受け入れる第一級の構成 (共有例グループ) を使用して共有動作を指定することをサポートしています。minitest を使用すると、継承または mixin を使用してテストを再利用できます、しかし、同じようなファーストクラスのサポートはありません。RSpec には明示的なフォーマッター API があります (そして、それを使用する多くのサードパーティのフォーマッターがあります)。minitest が同じ種類のファーストクラスのフォーマッタ API を持っていることは知りません。
常にテストを実行し、一日中 TDD を実践している者として、RSpec が私に与えてくれる力は非常に有用であると感じています。ただし、多くの人はそれがやり過ぎだと感じており、追加の抽象化には追加の認知コストがかかります。
以下は、minitest に欠けていると思われる RSpec の特定の機能の一部です。
before(:all)
フック (これは RSpec のパワー ユーザー機能であり、めったに使用されないことに注意してください。長年 RSpec を使用してきた中で、数回しか使用していません)around(:each)
フックミニテストを使用する利点:
def test_blah
またはit 'blah'
スタイルで使用できます。全体として、これは Sinatra と Rails のようなものであり、必要に応じて Minitest と RSpec の両方が適切な選択であると思います。
最後にもう 1 つ: Minitest の特定の側面が好きで、RSpec の他の側面が好きな場合は、それらを簡単に組み合わせて組み合わせることができます。興味があれば、これについてブログ投稿を書きました。
からスペックスタイルのミニテストに変換しましたTest/Unit
がshoulda
、効果があります。ボイラープレートがなくなり、速度も向上すると言われています。私は実際にRSpecを使用したことはありません。代わりに、私は独自の基本的なテストとモックのフレームワークを作成しました(モックを理解するためだけに、Minitestに切り替えたときにそれを放棄しました)。RSpecのスタブ/モックはもっと進んでいるのではないかと思うので、すでに習得している場合は、そのまま使い続けてください。それ以外の場合は、Minitestを使用してください。これにより、私のようなRSpecを知らない人とコラボレーションできるようになります。