- Bu soru, Birim Test Çerçeveleri ile ilgili değildir .
- Bu soru Ünite Testleri yazmakla ilgili değil .
- Bu soru UT kodunun nereye yazılacağı ve nasıl / ne zaman / nerede derlenip çalıştırılacağı ile ilgilidir.
In Legacy Kodu Etkin Çalışma Michael Tüyler iddia
iyi birim testleri ... hızlı koş
ve şu
Çalıştırmak için saniyenin 1 / 10'unu alan birim testi yavaş birim testidir.
Bence bu tanımlar anlamlı. Ayrıca, bir Birim Testler seti ve Ayrı Daha Uzun Süren Bir Kod Testleri seti tutmanız gerektiğini ima ederler , ancak sanırım (çok) hızlı bir şekilde çalışıyorsa, Birim Testini çağırmak için ödediğiniz fiyat. .
Açıkçası sorun C ++ ise "run" o senin Birim Testi ( ler ), etmelisin:
- Kodunuzu düzenleyin (hangi döngüye girdiğinize bağlı olarak üretim veya Birim Testi)
- derleme
- bağlantı
- Başlangıç Birim Test çalıştırılabilir ( ler )
Düzenleme (garip yakın oylamadan sonra) : Ayrıntılara girmeden önce, buradaki noktayı özetlemeye çalışacağım:
C ++ Ünite Testi kodu etkin bir şekilde düzenlenebilir, böylece hem (test) kodunu düzenlemek hem de test kodunu çalıştırmak etkili olur?
Bu durumda ilk sorun , Ünite Test kodunu nereye koyacağınıza karar vermektir , böylece:
- ilgili üretim kodu ile birlikte düzenlemek ve görüntülemek "doğal" dır.
- şu anda değiştirdiğiniz birim için derleme döngüsünü başlatmak kolay / hızlıdır
İkinci , ilgili problem daha sonra neler geribildirim anlık böylece derlemek.
Aşırı seçenekler:
- Her Birim-Test-Test-Birimi ayrı bir cpp dosyasında yaşar ve bu cpp dosyası ayrı bir şekilde derlenir + ayrı ayrı bir araya getirilir (test ettiği kaynak kod birim dosyasıyla birlikte), daha sonra bu bir Birim Testini çalıştırır.
- (+) Bu, tek Test Ünitesi için başlatma (derleme + bağlantı!) Süresini en aza indirir.
- (+) Test süper hızlı çalışıyor, çünkü yalnızca bir üniteyi test ediyor.
- (-) Tüm süitin yürütülmesi bazilyonlarca işlem başlatmaya ihtiyaç duyacaktır. Yönetmek için bir sorun olabilir.
- (-) Sürecin başlangıcındaki yükler görünür hale gelecektir
- Diğer taraf ise - hala - her test için bir cpp dosyası olacaktı, ancak tüm test cpp dosyaları (test ettikleri kod ile birlikte!) Bir çalıştırılabilir (bir proje başına / proje başına / seçiminizi seçmek) ile bağlantılı.
- (+) Derleme zamanı hala TAMAM olacaktır, çünkü sadece değiştirilen kod derlenecektir.
- (+) Çalıştırmak için yalnızca bir exe olduğundan, tüm paketi çalıştırmak kolaydır.
- (-) Herhangi bir nesnenin her bir yeniden derlemesi bir yeniden bağlantıyı tetikleyeceğinden süitin bağlantısı yaşlanacaktır.
- (-) (?) Tüm Ünite Testleri hızlı ise, zaman tamam olmalıdır , ancak takım elbise çalıştırmak için daha uzun sürer .
Peki, gerçek dünya C ++ Birim Testleri nasıl yapılır? Bunları yalnızca gece / saatte çalıştırıyorsam, ikinci bölüm gerçekten önemli değil, ilk bölüm, UT kodunu üretim koduna nasıl "bağlayacağımı" yani geliştiricilerin her ikisini de içinde tutmaları "doğal" odak daima bence önemli. (Eğer geliştiriciler odakta UT koduna sahipse, onu çalıştırmak isterler ki bu bizi ikinci bölüme geri getirir.)
Gerçek dünya hikayeleri ve deneyim takdir!
Notlar:
- Bu soru kasıtlı olarak belirtilmemiş bir platform ve marka / proje sistemi bırakır.
- Etiketli Sorular UT & C ++ başlamak için harika bir yer, ancak ne yazık ki çok fazla soru ve özellikle de cevaplar ayrıntılara veya belirli çerçevelere çok fazla odaklanmış durumda.
- Bir süre önce, destek birimi testlerinin yapısı ile ilgili benzer bir soruyu cevapladım . Bu yapının "gerçek", hızlı Birim Testleri için eksik olduğunu buldum. Ve diğer soruyu çok dar buluyorum, bu yüzden bu yeni soru.
:-(
Bu forumda değilse, bu soruların cevaplarını nerede arayacağınızı düşünüyorsunuz?
Pipeline<A,B>.connect(Pipeline<B,C>)
derleme nesnesi olacaktır, oysa Pipeline<A,B>.connect(Pipeline<C,D>)
derlenmemelidir: İlk aşamadaki çıktı türü, ikinci aşamadaki girdi türü ile uyumlu değildir.