web-dev-qa-db-ja.com

Ruby on RailsでTDDを開始するには?

私は概念に精通しています(大学でテストクラスを受講しました)が、「実際の」TDDプロジェクトに取り組んだことがないため、実際にそれらを実際に使用する方法はまだわかりません。

Ruby on Rails(おそらく2.3を使用))を使用してプロジェクトの開発を開始しようとしています。このアプリケーションは、データ、ユーザー、最初はそれほど複雑ではありませんが、今後6か月で大幅に拡張される可能性があるため、TDDをさらに活用するのに適切な時期だと思います。

私はそれを行う方法に関する基本的なアイデアを持っていますが、まだいくつかのポインターとアドバイスが必要です:

  • Ruby on Rails TDD 101の記事を読むべきですか?

  • 何をテストする必要がありますか?

  • どのgem/pluginを使用する必要がありますか?

  • rspec を使用する必要がありますか?他に何か?

  • すべてのテストクラスを取得したら、どのようにしてそれらを展開しますか? (例:継続的な統合)

  • TDDの実際の時間はどれくらいですか?

  • これについての本を読む必要がありますか、それとも遊んでオンラインチュートリアルを読むだけですべてを入手できますか?本を読む必要がある場合、どの本ですか?


私は例を使って学習するのが好きなので、誰かがこの問題を解決するためにTDDアプローチをどのように行ったらいいか教えてもらえますか?

会社があります。連絡先があります。連絡先は1社にリンクできます。会社は複数の連絡先を持つことができます。連絡先、会社を作成し、連絡先を会社にリンクする方法を作成したい。

回答でこの例を使用する必要はありませんが、役立つでしょう:)

167
marcgg

Ruby on Rails TDD 101の記事を読むべきですか?

テストのガイドRailsアプリケーション から始めます。

Railscast には、さまざまなテストツールの使用方法に関する優れたスクリーンキャストがあります。

何をテストする必要がありますか?

モデルは簡単にテストできるため、ここから始めます。単純なルールは、テストのすべてのifステートメントをカバーする必要があるということです。

すべてのEdgeケースと同様に、メソッドの目的をテストする必要があります(予想どおりに機能することを確認するため)。

また、テストをやり過ぎないようにしてください。

どのgem/pluginを使用する必要がありますか? rspecを使用する必要がありますか?他に何か?

開始するときは、単に Test Unit 。基本に慣れたら、 rspec または cucumber を使用できます。

Autotest は、真のテスト駆動を行いたい場合に便利なツールです。しかし、それは必須ではない「いい」です。

すべてのテストクラスを取得したら、どのようにしてそれらを展開しますか?

質問についてはわかりません。通常、テストは展開しません。すべてのテストクラスを作成したら、すべてのテストを実行するために「rake test」と入力します。

TDDの実際の時間はどれくらいですか?

本当に時間を節約できます。ラビリンスパズルが好きな人は、フィニッシュからスタートに進むと、ほとんどの場合簡単に解決できることがわかっています。 TDDと同じです。テスト駆動なしでは、「次に何をすべきか」を常に考えています。テスト駆動では、テストは次に何をすべきかを示します(ロジックが存在しない場合は破損するため、破損した部分を修正するだけです)。また、バグが少なくなり、長い目で見れば時間を大幅に節約できます。

これについての本を読む必要がありますか、それとも遊んでオンラインチュートリアルを読むだけですべてを入手できますか?本を読む必要がある場合、どの本ですか?

本は必要ありません。何でも学ぶ最も効率的な方法は、ただそれを行うことです。質問や問題が発生したら、本またはオンラインリソースに戻ってください。これも機敏です。

あなたの例では、テストが必要なものは次のとおりです。連絡先は1つの会社にリンクでき、会社は複数の連絡先を持ち、連絡先を作成する方法を作成し、連絡先を会社にリンクできます。

class CompanyTest <Test::Unit
    def test_relationship # test associations/relationships
        c = companies(:some_company)
        assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts
    end
end

class ContactTest<Test::Unit
   def  test_relationships
        c = contact(:some_contact)
        assert_equal some_company, c.company # make sure the contact link to 1 company
   end

   def  test_create/add
        # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly
   end
end
202
ez.

2010年の夏にサンフランシスコでパブリッククラスとして教えられた6エピソードのビデオシリーズを制作しました。この資料は、RSpec 1.3を使用したRails 2.3のテストと開発者の効率をカバーしています。少し古いですが、主な概念はRspec 2.xのRails 3に適用されます

http://www.rubyfocus.biz/class_video/2010/07/19/Rails_tdd_class_1.html

13
Wolfram Arnold

この本をお勧めします: Ruby on Rails Tutorial 。私はそれでほとんど終わりました。本はTDDを使用しますwhole本。試してみる!

9
sivabudh

私はこの本をお勧めします: RailsでのアジャイルWeb開発

8
JRL

私が使う :

  1. Shoulda およびテスト用のrspec
  2. モッキングのためのモカ
  3. Factory_girl 工場用
  4. parallel_specs 高速テスト用
  5. metric_f コード分析用
5
Mike

TDDは、最初にテストを作成することに関するものです。これは基本的に、アプリケーションコードを記述する前に独自のクライアントを記述することを強制します。サイクルは通常、存在しないAPIのテストを作成し、失敗することを想定してテストを実行し、APIコードを作成し、テストを再度実行して、パスすることを確認します。次に、次のテストを作成します...など。

これにも興味があるかもしれません Railsガイド

5
Andy Gaskell

どのgem/pluginを使用する必要がありますか?

私はいつも楽しんできました shoulda

TDDの実際の時間はどれくらいですか?

私がTDD開発を常に支持してきた理由は、特定のコードの実装方法に焦点を合わせているからです。私は、TDDの原則をより厳守するたびに、後の手直しに費やす時間が少なくなるという逸話的な感覚を持っています。費やされる時間は、単体テストをどれだけうまく書くかにかかっています。単体テストが期待される動作をキャプチャしない場合、それらに費やされたすべての時間が無駄になります。

3