私はその概念についてはよく知っています (大学でテストの授業を受けた) が、"本物の" TDD プロジェクトに取り組んだことがないので、実際にどのように使用すればよいのかまだよくわかりません。
私は Ruby on Rails (おそらく 2.3 を使用) を使用してプロジェクトの開発を開始しようとしています。このアプリケーションは、データ、ユーザー、およびいくつかのファイルの管理に使用されます。最初はそれほど複雑ではありませんが、今後 6 か月で大幅に拡張される可能性があるため、今が TDD をさらに進めるのに適切な時期だと感じています。
基本的なやり方はわかっていますが、まだいくつかのヒントやアドバイスが必要です。
Ruby on Rails TDD 101 のどの記事を読むべきでしょうか?
何をテストする必要がありますか?
どの gem/プラグインを使用すればよいですか?
使用すべきかrspec? 他に何かありますか?
すべてのテスト クラスを取得したら、それらをどのようにデプロイすればよいですか? (例: 継続的インテグレーション)
TDD は実際どれくらい時間がかかりますか?
これについては本を読む必要がありますか、それとも実際に触ってみてオンライン チュートリアルを読むだけですべて理解できますか? 本を読む必要がある場合、どの本ですか?
私は例を使って学習するのが好きなので、この問題を解決するために TDD アプローチをどのように採用すればよいか教えていただけませんか。
会社があります。連絡先があります。連絡先は 1 つの会社にリンクできます。会社は複数の連絡先を持つことができます。連絡先、会社を作成し、連絡先を会社にリンクする方法を作成したいと考えています。
回答にこの例を使用する必要はありませんが、役に立つと思います :)
ベストアンサー1
Ruby on Rails TDD 101 のどの記事を読むべきでしょうか?
まず始めにRailsアプリケーションのテストガイド。
またレールキャストさまざまなテスト ツールの使用方法に関する優れたスクリーンキャストがいくつかあります。
何をテストする必要がありますか?
まず、テストが簡単なモデルから始めます。簡単なルールは、テストですべての if ステートメントをカバーする必要があるということです。
メソッドの目的(期待どおりに機能していることを確認するため)とすべてのエッジ ケースをテストする必要があります。
また、過剰にテストしすぎないように注意してください。
どの gem/プラグインを使用すればよいですか? 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