1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on RailsでTDDを始めるには?[クローズド]

2022-04-24 23:32:46

質問

私はそのコンセプトについてよく知っていますが(大学でテストの授業を受けました)、quot;real" TDDプロジェクトに取り組んだことがないので、それらを実際にどう使うかはまだわかりません。

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

基本的なやり方はわかっているのですが、まだいくつかの指摘やアドバイスが必要です。

  • Ruby on RailsのTDD 101の記事は? を読めばいいのでしょうか?

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

  • どのようなgem/pluginを使用すればよいですか?

  • を使用する必要があります。 リスペック ? 他の何か?

  • テスト用クラスをすべて作成したら、どのようにデプロイすればよいのでしょうか?(例: Continual Integration (継続的インテグレーション))

  • TDDは実際どのくらい時間がかかるのでしょうか?

  • それとも、オンラインチュートリアルを読んで、遊んでいるだけで全て理解できるのでしょうか?本を読む必要があるとしたら、どんな本ですか?


私は例で学ぶのが好きなので、この問題を解決するためにTDDアプローチでどうすればいいか、誰か教えてください。

<ブロッククオート

私は会社を持っています。連絡先があります。A コンタクトは1社にリンクすることができます。A は、複数の連絡先を持つことができます。I を作成する方法を作りたい。 連絡先、会社、連絡先のリンク を企業に追加します。

この例を回答で使用する必要はありませんが、参考になると思います :)

どのように解決するのですか?

<ブロッククオート

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

私は、まず Railsアプリケーションのテストガイド .

また レールキャスト には、さまざまなテストツールの使い方に関する素晴らしいスクリーンキャストがあります。

<ブロッククオート

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

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

メソッドの目的(期待通りに機能しているかどうか)だけでなく、すべてのエッジケースをテストする必要があります。

また、過剰なテストになってしまわないように注意しましょう。

<ブロッククオート

どのような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