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