2012-09-18 6 views
47

私はちょうどMinitestのRailscastを見ました。MinitestとRspec

RSpecとMinitestを使ってレールアプリをテストする際の賛否両論は何ですか? RSpecからMinitestへの変換を失うのはどの機能ですか?

+0

http://stackoverflow.com/questions/8423227/migrating-from-rspec-to-minitestspec – matt

+0

おそらく、これら2つの質問をマージする必要があります。マージする方法はありますか? –

+10

+12投票で終了!投票する投票。 –

答えて

69

私はRSpec開発者の一人であり、minitestを一度も使用していないので、この回答を読む際に偏りを考慮してください。

RSpecのパワーは、非常に多くのテスト概念をファーストクラスのオブジェクトに変換するという事実から来ています。 Test :: UnitとMinitestが簡単なアサーション作成メソッドを使用する場合、RSpecは否定、自己記述などをサポートするファーストクラスのマッチャーオブジェクトを使用します。 RSpecの例は、豊富なメタデータをサポートするファーストクラスのオブジェクトです。 minitest/spec itブロックは、同じ種類の豊富なメタデータをサポートしない単純なメソッドにコンパイルされます。 RSpecは、引数を受け入れるファーストクラスのコンストラクト(共有サンプルグループ)を使用して共有ビヘイビアを指定することをサポートしています。 w/minitestではinheritance or a mixin to re-use testsを使用できますが、同じ種類のファーストクラスのサポートはありません。 RSpecには明示的なフォーマッタAPIがあります(それを使用する多くのサードパーティのフォーマッタがあります)。私は、同じ種類のファーストクラスのフォーマッタAPIを持つ最小限のものを認識していません。

いつもテストをして1日中TDDを練習している誰かが、私はRSpecが私に非常に有用な力を与えることを知っています。しかし、多くの人々はそれが過度のものであると感じており、余分な抽象化には追加の認知コストがあります。 ;私はほんの数でそれを使用しました

  • before(:all)フック(これはめったに使用しないでくださいRSpecののパワーユーザー機能です注意:ここでは

    は、私はminitestが欠けていると信じていることをRSpecのが持っているいくつかの特定の機能ですRSpecのを使用しての多くの年での場面)
  • around(:each)フック
  • 共有例グループ
  • 共有は、Uすることができ
  • 豊富なメタデータのサポートをコンテキストどの例が実行されるか、どのようなグループの共有コンテキストが含まれているか、どのようなグループのモジュールが混在するかなどを制御するためにsedを使用します。
  • w/rspec-mockの広い範囲の模擬機能の統合サポート。 Minitest :: Mockははるかに単純であり、比較においてより制限されています。
  • RSpecはrspec-fireです。これはすばらしいです。 Minitestを使用しての

利点:

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

全体的に、Sinatra vs. Railsのようなものですが、MinitestとRSpecはどちらも必要に応じて適切な選択肢です。

最後のこと:Minitestの特定の側面がある方が良いのですが、RSpecの方が気に入っている他のものは、簡単に混合してマッチングできます。興味があれば私はwrote a blog post about thisです。

+0

すばらしい説明をありがとう。 –

+2

ボリスは、MiniTestをSpork、Guard、Capybara、およびあらゆる種類のJavascriptドライバと統合したい場合は、1週間を費やしてそれを把握して安定させることを計画することができます。 MiniTestは、Railsアプリケーションの最も基本的なもの以外のものについては、完全なテストスタックを持つことになると、プライムタイムの準備ができていません。私は古い大学に自分自身を試してもらいましたが、それはちょうど欲求不満で終わりました。 – AKWF

4

Test/UnitからshouldaのスペックスタイルのMinitestに変換され、それは報われません。それはボイラープレートを廃止し、スピードも改善すると言います。私はRSpecを使ったことはありません。代わりに、私は独自の原始的なテストとモックのフレームワークを書きました(ちょうど嘲笑を理解する目的のために、私はMinitestへの切り替え時にそれを断念しました)。私は、RSpecのスタブ/モックがもっと進んでいるかもしれないと思うので、既にそれを学んだら、それを使い続けてください。それ以外の場合は、Minitestを使用してください。これにより、私のようなRSpecを知らない人々と共同作業することができます。