Ünite testleri depoda saklanmalı mıdır?


50

GitHub'da sakladığım bir kütüphane için nihayet ünite testi yapan ve büyüyen bir programcıyım.

Test takımına depoya dahil olabileceğimi düşündüm, ancak diğer projelere baktığımda, testlerin dahil edilmesi ya da kaçırılmış görünüyor.

Bu kötü form olarak mı kabul edilir? Kullanıcıların yalnızca çalışma koduyla ilgilendikleri ve yine de kendi çerçevelerinde test edecekleri fikri mi?


13
Neden olmasın? Testler proje ile birlikte gelmeli veya zar zor kullanılamazlar.

61
Bazı projelerin havuzlarında birim testleri içermemesi, bu testlerin ilk başta bulunmaması nedeniyle daha olasıdır.
Prasopes

4
Ayrı ayrı üretilirler, ancak aksi takdirde u testleri kodla sıkıca birleştirilir. Tutarlılığı sağlamak için bir çeşit bağımlılık yönetimi yapılmalıdır. Aynı depo içine koyarak Be, subrepository veya maintaing versiyon vb test deposuna, için "bağlantı" kontrollü
MaR

2
@stoupa kesinlikle haklı: en iyisini kabul etmek güzel olurdu, harika bir yerde bir yerde saklanmış testler var ama gerçek dünyada, programcılar tembel.
Cascabel

2
Not, derleme betiğinizde test sınıfı derlemesini devre dışı bırakmanın iyi bir fikir olduğunu düşünüyorum.
kullanıcı606723,

Yanıtlar:


119

Testlerini kesinlikle havuza koymalısın. Testler benim görüşüme göre kodun bir parçası ve başkalarına onu iyi anlamalarına yardımcı olabilir (eğer iyi yazılmışsa). Ayrıca, kod tabanınızı değiştirirken veya katkıda bulunurken başkalarına yardımcı olabilirler. İyi testler, yaptığınız değişikliklerin yanlışlıkla herhangi bir şeyi bozmadığına dair güven verebilir.

Yine de test kodu üretim kodundan ayrı olarak ayrılmalıdır. Örneğin Maven bunu, üretim ve test kodunu farklı klasörlere koyarak başarır. "Bu dosyanın yapımın veya test kodunun bir parçası olduğu" sorusu asla ortaya çıkmamalıdır.

Şahsen kullanılmış kütüphaneler için birim testleri yazmıyorum kendi kodumda. Onların çalışmasını bekliyorum (en azından bir sürüm kullandığımda, fakat böcekler açıkça görünse de). Entegrasyon testlerinde test kapsamı alıyor, ancak bu yeterli değil.


1
Başka bir örnek olarak, ipython'un test klasörüne bakın . Biri kontrol ederse, nereye koyduğuna bakılmaksızın testler için göreceli bağlantılar hala geçerlidir. Yeni dev makinenizin uygun şekilde yapılandırılıp yapılandırılmadığını belirlemek için önemli olan, onu test etmeyi önemsiz kılar.
Spencer Rathbun

Testler sadece kodun bir parçası değil aynı zamanda belgelerin bir parçası ve çoğu zaman da belirtimin bir parçasıdır. Testler (yapılan ve yapılan) "canlı belgeler" dir.
Michael Easter

54

Eğer varsa yok o zaman iade edilen kaynak kodu, içinde birim testleri şunlardır:

  • Bu kodun kendi kopyasını indiren ve oluşturan kişi, tasarlandığı şekilde çalıştığını doğrulayacak nasıl? Derleyici ve kitaplık hataları nadirdir ve veri hataları (özellikle kaynak kodun derlenmesini imkansız kılmayanlar) daha da nadirdir, ancak özellikle yapı ortamını bir dereceye kadar dikte edemediğiniz zaman, kesinlikle kesilebilirler. işveren hangi araçların kullanıldığını belirleyebilir.
  • Kaynak kodun yerel kopyasına bir şey olursa, testleri nasıl geri alacaksın?
  • Yeni bir geliştirici, değişikliklerinin mevcut kod tabanında hiçbir şeyi bozmadığını nasıl doğrulayacak?

Alt satırda, ben dikkate alacağını değil resmi kaynak kodu deposu çok kötü bir şey yazılmış herhangi ünite testleri dahil.


7

Tabii ki birkaç nedenden dolayı birim testlerini depoya koymalısınız:

  • önceki sürüme dönmek kolaydır
  • Projede çalışan diğer insanlar da birim testlerine erişebiliyor
  • bazı kişiler birim testlerini belgelerin bir parçası olarak görür (TDD ve BDD)

6

Başka bir bilgisayarda çalıştırmak için herhangi bir şans varsa, kesinlikle onları dahil edin. Ayrı ayrı inşa edilmeleri gerekir, böylece kullanıcılar mecbur değildir ve fazladan bağımlılıkları olabilir, ancak kesinlikle dahil edilmeleri gerekir.

Depodaki testleri içermeyen çoğu projenin kesinlikle sahip olmadığından şüpheleniyorum.

Testlerin ayrı modül olarak yapılmasının bir nedeni olabilir, böylece yeni testleri eski kodlara karşı kolayca çalıştırabilirsiniz. Komut satırı üzerinden API-kararlı kütüphane veya kara kutu testleri için faydalı olacaktır; Yeni testlerin muhtemelen eski kodlarla derlenmeyeceği derlenmiş dillerin kullanışlılığı sınırlıdır.


5

Kesinlikle. Buradaki ekstra bonuslar, bir kaynak dosyanın X versiyonunun testin Y versiyonuna göre izlenebilmesidir. Başka bir deyişle, önceki bir sürüme geri dönüp o sürüm için tasarlanan uygun testleri (API değişikliği veya bazı durumlarda) alabilmeniz gerekir.


3

Net'te "Brownfield Uygulama Geliştirme" bölümünü okumayı yeni bitirdim ve bu, kaynak kontrolü ve birim testlerini (özellikle Sürekli Entegrasyon alanında) nereye / nasıl / niçin dahil edeceğini de içeren bir uygulamanın yapısına ilişkin bazı mükemmel tavsiyeler sunar. . Bir .NET geliştiricisi iseniz, bunu tavsiye ederim.

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.