Ruby on Rails ile TDD'ye nasıl başlanır? [kapalı]


167

Kavramlara aşinayım (kolejde test dersleri aldım), ancak "gerçek" bir TDD projesinde hiç çalışmadım çünkü bunları nasıl kullanacağımdan henüz emin değilim.

Ruby on Rails kullanarak bir projenin geliştirilmesine başlamak üzereyim (büyük olasılıkla 2.3 kullanıyor). Bu uygulama verileri, kullanıcıları ve bazı dosyaları yönetmek için kullanılacaktır. İlk başta çok karmaşık olmayacak, ancak önümüzdeki 6 ay içinde çok fazla ölçeklenebilir, bu yüzden TDD'ye daha fazla girmek için doğru zaman olduğunu hissediyorum.

Bunu nasıl yapacağım hakkında temel bir fikrim var, ama yine de bazı işaretlere ve tavsiyelere ihtiyacım var:

  • Hangi Ruby on Rails TDD 101 makalesini okumalıyım?

  • Test etmek için neye ihtiyacım var?

  • Hangi taş / eklentiyi kullanmalıyım?

  • Rspec kullanmalı mıyım ? Başka bir şey?

  • Tüm test derslerimi aldıktan sonra, bunları nasıl uygularım? (örneğin: Sürekli Entegrasyon)

  • TDD gerçekten ne kadar zaman alır?

  • Bununla ilgili bir kitap okumam gerekiyor mu yoksa sadece onunla oynayarak ve çevrimiçi öğreticiler okuyarak her şeyi alabilir miyim? Bir kitap okumam gerekirse, hangi kitap?


Örneklerle öğrenmeyi seviyorum, bu yüzden birisi bana nasıl gideceğimi söyleyebilir ve bu sorunu çözmek için bir TDD yaklaşımı alabilir:

Şirketlerim var. Kişilerim var. Bir kişi 1 şirkete bağlanabilir. Bir şirketin birden fazla kişisi olabilir. Kişiler, şirketler oluşturmak ve kişileri şirketlere bağlamak için yollar oluşturmak istiyorum.

Bu örneği cevabınızda kullanmak zorunda değilsiniz ama yardımcı olur :)

Yanıtlar:


202

Hangi Ruby on Rails TDD 101 makalesini okumalıyım?

Ray uygulamalarını test etme kılavuzu ile başlayacağım .

Ayrıca Railscast'in farklı test araçlarının nasıl kullanılacağı hakkında bazı mükemmel ekran görüntüleri vardır.

Test etmek için neye ihtiyacım var?

Test etmek kolay olduğu için modellerle başlayacağım. Basit kural, testinizdeki her if ifadesini kapsamanız gerektiğidir.

Yöntemin amacını (beklendiği gibi çalıştığından emin olmak için) ve tüm kenar durumlarını test etmelisiniz.

Ayrıca, testlerin sona ermediğinden emin olun.

Hangi taş / eklentiyi kullanmalıyım? Rspec kullanmalı mıyım? Başka bir şey?

Başladığınızda kullanın Test Unit. Sen kullanabilirsiniz rspecveyacucumberTemel bilgileri öğrendikten sonra .

Autotestgerçekten test odaklı olmak istiyorsanız sahip olmak için güzel bir araçtır. Ama gerekli olmayan bir 'güzel bir sahip'.

Tüm test derslerimi aldıktan sonra bunları nasıl kullanabilirim?

Sorudan emin değilim. Testleri genellikle dağıtmazsınız. Tüm test sınıflarına sahip olduğunuzda, tüm testlerinizi çalıştırmak için basit bir 'komisyon testi' yazın.

TDD gerçekten ne kadar zaman alır?

Gerçekten zaman kazandırır. Labirent bulmacayı seviyorsanız, başından sonuna kadar giderseniz çözmenin neredeyse her zaman daha kolay olduğunu bilirsiniz. TDD ile aynı. Teste Dayalı olmadan sürekli olarak 'bundan sonra ne yapmalıyım' diye düşünüyorsunuz. Test Tahrikli ile, test size bir sonraki adımda ne yapacağınızı söyleyecektir (mantık orada değilse kırılır, sadece kırık kısmı düzeltmeniz gerekir). Ayrıca uzun vadede size çok zaman kazandıracak daha az hata var.

Bununla ilgili bir kitap okumam gerekiyor mu yoksa sadece onunla oynayarak ve çevrimiçi öğreticiler okuyarak her şeyi alabilir miyim? Bir kitap okumam gerekirse, hangi kitap?

Bir kitaba ihtiyacınız yok. Bir şeyi öğrenmenin en etkili yolu şudur: Sadece yapın. Bir soru veya sorunla karşılaştığınızda kitaba veya çevrimiçi kaynaklara geri dönün. Bu da çevik.

Örneğinizde, test edilmesi gereken şeyler şunlardır: Bir kişi 1 şirkete bağlanabilir, Bir şirketin birden fazla kişisi olabilir, kişi oluşturmanın yolları oluşturabilir ve kişileri şirketlere bağlayabilirsiniz.

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
Makalenin bağlantısı koptu, ancak burada bulundu: web.archive.org/web/20100325215651/http://bloritsch.d-haven.net/…
fivetwentysix




5

TDD öncelikle sınavlar yazmakla ilgilidir. Bu, temel olarak uygulama kodunuzu yazmadan önce kendi istemcinizi yazmaya zorlar. Döngü genellikle mevcut olmayan bir API için bir test yazmak, başarısız olmasını beklemek için testi çalıştırmak, API kodunuzu yazmak, testinizi tekrar çalıştırmak ve geçtiğinden emin olmaktır. Sonra bir sonraki testinizi yazın ... vb.

Ayrıca ilginizi çekebilir Rails kılavuz .



3

Hangi taş / eklentiyi kullanmalıyım?

Ben her zaman shoulda'dan keyif aldım .

TDD gerçekten ne kadar zaman alır?

TDD gelişimini her zaman tercih etmemin nedeni, belirli bir kod parçasını nasıl uygulayacağımıza odaklanmasıdır. TDD ilkelerine daha güçlü bağlı kaldığımda, daha sonra yeniden çalışmak için daha az zaman harcadığımı anekdot hissim var. Ancak harcanan zaman, birim testleri ne kadar iyi yazdığınızdır. Birim testleri beklenen davranışı yakalamazsa, bunlara harcanan tüm zaman boşa gider.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.