50

Minitest のRailscastを見たところです。

Rails アプリのテストに RSpec と Minitest を使用する場合の長所と短所は何ですか? RSpec から Minitest に変換すると、どの機能が失われますか?

4

2 に答える 2

75

私は 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)フック
  • 共有例グループ
  • 共有コンテキスト
  • どのサンプルを実行するか、どのサンプル グループに共有コンテキストを含めるか、どのサンプル グループにモジュールを混在させるかなどを制御するために使用できる豊富なメタデータ サポート。
  • rspec-mocks を使用した幅広いモッキング機能の統合サポート。Minitest::Mock ははるかに単純で、比較するとより制限されています。
  • RSpec にはrspec-fireがあり、これは素晴らしいです。

ミニテストを使用する利点:

  • 標準ライブラリに組み込まれているため、余分なものをインストールする必要はありません。
  • def test_blahまたはit 'blah'スタイルで使用できます。
  • コードベースは非常に小さくシンプルです。RSpec は、古くて機能が追加されているため、比較すると大きくなっています。
  • Minitest は RSpec よりも高速にロードされます (3 つの gem にまたがる多くのファイルを持つ RSpec と比較すると、約 4 ファイルのコードです)。しかし、RSpec は決して遅いわけではないことに注意してください。最近のほとんどのプロジェクトでは、RSpec から 1 秒以内 (多くの場合 500 ミリ秒以内) にテスト フィードバックを受け取ります。

全体として、これは Sinatra と Rails のようなものであり、必要に応じて Minitest と RSpec の両方が適切な選択であると思います。

最後にもう 1 つ: Minitest の特定の側面が好きで、RSpec の他の側面が好きな場合は、それらを簡単に組み合わせて組み合わせることができます。興味があれば、これについてブログ投稿を書きました。

于 2012-09-18T16:00:24.597 に答える
4

からスペックスタイルのミニテストに変換しましたTest/Unitshoulda、効果があります。ボイラープレートがなくなり、速度も向上すると言われています。私は実際にRSpecを使用したことはありません。代わりに、私は独自の基本的なテストとモックのフレームワークを作成しました(モックを理解するためだけに、Minitestに切り替えたときにそれを放棄しました)。RSpecのスタブ/モックはもっと進んでいるのではないかと思うので、すでに習得している場合は、そのまま使い続けてください。それ以外の場合は、Minitestを使用してください。これにより、私のようなRSpecを知らない人とコラボレーションできるようになります。

于 2012-09-18T05:07:09.580 に答える