Ruby on RailsでTDDを始めるには?[閉まっている]


167

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

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

私はそれを行う方法についての基本的な考えを持っていますが、それでもいくつかの指針とアドバイスが必要です:

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

  • テストには何が必要ですか?

  • どのgem / pluginを使うべきですか?

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

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

  • TDDは本当にどれくらいの時間を消費しますか?

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


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

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

あなたの答えでこの例を使用する必要はありませんが、それは役に立ちます:)

回答:


202

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

まず、Railsアプリケーションをテストするためのガイドから始めます

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

テストには何が必要ですか?

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

メソッドの目的(期待どおりに機能することを確認するため)とすべてのエッジケースをテストする必要があります。

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

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

開始したら、を使用してくださいTest Unit。基本を理解してから、rspecまたは使用cucumberしてください。

Autotest真にテスト駆動型になりたい場合に便利なツールです。しかし、それは「いいこと」ではありません。

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

質問がわからない。通常はテストをデプロイしません。すべてのテストクラスを取得したら、すべてのテストを実行するための単純なタイプの「レイクテスト」を作成します。

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

3
記事へのリンクが壊れたが、ここでそれを発見された:web.archive.org/web/20100325215651/http://bloritsch.d-haven.net/...
fivetwentysix




5

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

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



3

どのgem / pluginを使うべきですか?

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

TDDは本当にどれくらいの時間を消費しますか?

私が常にTDD開発を支持してきた理由は、特定のコードを実装する方法に焦点を当てているからです。私は、TDDの原則をより強く遵守する場合はいつでも、後で再作業する時間を短縮するという事例的な感情を持っています。ただし、費やす時間は、単体テストをどれだけうまく作成できるかにかかっています。単体テストが期待される動作をキャプチャしない場合、それらに費やされるすべての時間が無駄になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.