Birim testlerinde dosya içeriğini / kodlamasını kontrol etmek 'kötü uygulama' olarak değerlendiriliyor mu?


84

Bağlamın bir kısmı: Bugün erken saatlerde, başka bir meslektaşımın sağladığı bazı SQL kodlarını güncellemem gerekiyordu ve oldukça büyük bir komut dosyası olduğundan, ayrı bir dosya olarak depolanıyordu (çalışma zamanında okunup çalıştırılıyor). Bunu yaparken yanlışlıkla birkaç ay önce sahip olduğumuz iki hatayı tekrar ortaya koydum, yani:

  • Hangi nedenle olursa olsun ASCII dosyası UTF-16'da kodlanmıştır (meslektaşım bana neden olan dosyayı e-posta ile göndermiştir).
  • Komut dosyası ilk SETifadeleri eksikti (üretimdeki bazı sürücü olayları nedeniyle zorunlu, ancak yerel olarak temiz bir kurulum için gerekli değil).

Yaklaşık bir saat boyunca bu hata ayıklama işleminden sonra (tekrar) Bunun bir daha yaşanmayacağından emin olmak için bazı ünite testleri yazmaya karar verdim (ve gelecekteki geliştiriciler için kolay bir düzeltme sağlamak için iddia mesajına düzeltmenin hızlı bir yolunu dahil ettim).

Ancak bu kodu bastığımda başka bir meslektaşım (aynı zamanda ekibimizin lideri olan) bana doğru yürür ve bunları tekrar yapmamam gerektiğini söyledi çünkü:

"Bu şeyler birim testlerine ait değil"

"Birim testleri yalnızca kodunuzun akışını kontrol etmek için kullanılmalıdır"

Yaptığım şeyin yanlış olmadığını düşündüğüm için şimdi oldukça çekiciyim, çünkü bu hata gelecekte tekrar ortaya çıkmayacak, ancak bu meslektaşım kıdemli olarak çalışıyor ve günün sonunda neye karar verecek zamanımızı harcıyoruz. Ne yapmalıyım? Bu şekilde yaptığım için yanlış mıyım? Kötü uygulama olarak mı kabul edilir?



35
Ünite testleri sadece kodunuzun akışını kontrol etmek için kullanılmalıdır ” derim. Geleneksel olarak, izolasyonda kabul edilen "ünitenin" doğru olduğundan emin olmak için gerekli tüm testleri içermelidir. Yalnızca "akışı kontrol etmek" için yararlı olan ünite testlerini yazarsanız, bunun anlamı ne olursa olsun, ayrı kapsamlı test süitleriniz de vardır (QA departmanı tarafından yazılmıştır).
gbr

8
Yine de meslektaşınızın sorunu muhtemelen bu testleri yaptığınız yer olabilir. Buna, mezhepler tartışmalarını / kutsal savaşları bırakarak odaklanacağım. Bu testlerin eklediğiniz oda için çok yavaş olması muhtemeldir, ancak meslektaşınızın sadece ünite testleri fikrine sabitlenmesi ve var olmayan bir sorundan dolayı problem çıkarması da mümkündür; bu yüzden önce asıl sorunun ne olduğunu açıklığa kavuşturmak daha iyidir.
gbr

2
Bu arada, bu testler bu SQL dosyasını her değiştirdiğinizde çalıştırmak isteyeceğiniz bir şeye benziyor. Burada asıl sorun, "yalnızca değiştirilmişse çalıştır" çalışma modunu desteklemeyebilecek test araçları olabilir; Gerçek, somut sorunlara yol açan, sadece belirli testler için bir miktar çamurla "sadece değiştirilmişse" işlevselliğini manuel olarak dahil etmek faydalı olabilir.
gbr

5
Dosyanın doğru içeriğe sahip olduğunu test etmek yerine kodlama neden çalıştığını test etmiyor mu?
immibis

Yanıtlar:


156

Büyük olasılıkla yazdığınız testler, entegrasyon veya regresyon testlerine birim testlerinden daha yakındır. Her ne kadar çizgi çok bulanık olabilir ve bazen birim testinin ne olduğu veya ne olmadığı konusunda titremeye dönüşürken, meslektaşınıza geri döneceğim ve kodun doğruluğunu sağlamak için değer kattığı için yazdığınız testlerin nerede olması gerektiğini sordum.

Bir testin ne olduğuna veya ne olmadığına çok fazla odaklanmam ve bir entegrasyon testi olsa bile testte hala değer olabileceğini anlayamadım.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Thomas Owens

36

Teknik olarak, bu bir ünite testi değil ve bir doğrulama adımından daha fazlası. Doğru yaklaşım gerçekten iş akışınızın ne olması gerektiğine bağlıdır. Ekip lideriniz, birim testlerinin amacının ne olduğu konusunda haklıdır. Benim düşüncem, bu hala yapılması gereken bir iş için yanlış aracı kullanma durumudur. Öyleyse şununla başla:

Çözmeye çalıştığım sorun nedir?

Açıklamaya göre, herhangi bir veritabanı komut dosyasının bazı standartlara uygun olduğunu doğrulamanız gerekir.

Sorunu çözmek için hangi araçlar / işlemler mevcut?

Kaynak kod kalitesi genellikle statik analiz araçları ile kontrol edilir . SQL'inizi doğrulamak için statik bir analiz aracınız yoksa , kendisine iletilen herhangi bir SQL dosyasında denetimi yapan hızlı ve kirli bir araç oluşturabilirsiniz . Bahsettiğiniz sorunları halledebilecek statik analiz araçları olup olmadığını kontrol etmekten zarar gelmez.

Yapı altyapınızın bu kısmını, örneğin Jenkins'e dahil etmek gibi bir parçası haline getirirseniz, projenizdeki tüm SQL dosyalarına uygulanabilir.

Birim testleri, yalnızca mevcut dosyanız için sorunu çözer.

Araca olan ihtiyacı nasıl iletebilirim?

Bu oldukça kolay, takım liderinizle konuşun. Ürün sahibiyle birlikte çalışabilir ve takımlara yatırım yapma riskini / ödülünü siz belirleyebilirsiniz. Bu muhtemelen bir kereye mahsus olmak üzere bir sorun ise, takım muhtemelen fazladan olacaktır. En büyük sorunları yakalamak için gereken araç kolay ise, sadece akıl sağlığı kontrolü için buna değer olabilir.

Takım lideriniz sizin (veya benim) düşünmediğiniz, sorunu daha doğru çözebilecek bazı fikirlere sahip olabilir.


21
Maliyete karşı riski tartışırken, daha önce çözülen hataların tekrar tanıtılması nedeniyle zaman kaybına neden olduğunu not etmek önemlidir. Bu tek başına doğrulamayı otomatikleştirmek için güçlü bir argümandır. +1
jpmc26

1
@ jpmc26, tamamen katılıyorum. Tartışma, neyin yanlış olduğunu bulmak için saatlerce kaybettiğiniz gerçeğiyle başlamalı ve birim testleriniz, ekibin geri kalanının aynı süreyi kaybetmesini engellemeye yönelik ilk girişiminizdi. Ancak, yönetime ve paydaşlara cevap vermek zorunda olan takım lideriyle çalışmak genellikle çok takdir edilmektedir. Bir takım lideri olarak, yönettiğimiz araçları / uygulamaları / kodu savunabilmek istiyorum. Gerçek gereksinimlere kadar izlenemeyen testler gördüm, ben de endişelendim.
Berin Loritsch

1
@BerinLoritsch Teknik olarak, bu iddiayı esas alarak neyin "teknik" olduğunu bilmek istediğim bir test değil . Söyleyebileceğim kadarıyla, birim testlerin tek bir tanımlaması yoktur ve herkes “ne oldukları ” hakkında kendi fikirlerine sahip olmuştur .
gbr

2
@gbr Geliştiriciler arasında, birim testlerinin harici sistemlerden izole edilmiş olarak yapılan testler olduğu konusunda gayrı resmi bir anlaşma vardır. Dosyalar, veritabanları veya diğer harici servislerle etkileşimi değil, yalnızca kodu test ederler . Wikipedia bu anlayışı belgelemektedir: en.wikipedia.org/wiki/Unit_testing#External_work .
jpmc26

1
@BerinLoritsch Soruyu farklı bir şekilde yorumlamamız da mümkün, yine de, çok ayrıntılı değildi ve yazar henüz kimseye geri dönmedi. Zaten bu testlerin sınıflandırılması hakkında daha fazla tartışmak istemiyorum, ne olması gerektiği önemli (eğer olması gerektiğinden eminim) ve ne sıklıkta çalıştırmaları gerektiğini (IDE'deki her değişiklikte, her seferinde) Yerel taahhüt, merkezi depoya her basışta, her tot zamanda ...).
gbr

19

"Unit Tests" dosyalarına erişen testleri çağırmak kötü bir uygulamadır.

O: "Bu şeyler birim testlerine ait değil"

Siz: "Mantıklı, ama onları koymak için daha iyi bir yer bulamadım. Nereye aitler?"

Ne yazık ki, ne tür testler yapıldığı ve nasıl organize edildikleri tamamen şirkete özgüdür. Dolayısıyla, şirketinizin bu testleri nasıl yürüttüğünü öğrenmeniz gerekir.

Ünite Testleri haricinde otomatik testler yapmak için henüz bir yolunuz yoksa, pratik yaklaşım, Ünite Testleri olmayan bir Ünite Testini önekle işaretlemektir; Gerçekte sahip olduğunuz / ihtiyaç duyduğunuz testleri. Bundan sonra örgütlenmeye başlayabilirsiniz.


2
"Unit Tests" dosyalarına erişen testleri çağırmak kötü bir uygulamadır. Burada erişilen dosya kaynak dosyadır. Herhangi bir kaynak dosyaya kadar erişilebilecektir (ayrıştırmak için). Testin muhtemelen kontrol edilen "ünite" (SQL) ile aynı dilde yapılmayacağı gerçeği, alışılmadık hale getirir, ancak ünite testi olarak sınıflandırılmasını etkilememelidir. devam ediyor ...
gbr

1
... Aslında, bir dosyanın doğru kodlaması, her derleyici tarafından bir kaynak dosyayı her okuduğunda yapılan bir "sınama" dır. Burada sorun, çalışma zamanında yorumlanan harici bir dosya olmanın "derleyici testleri" nin otomatik olarak çalıştırılmayacağı ve bu yüzden açıkça eklemek için tamamen uygun bir durum olduğunu düşünüyorum ve bunun haklı olarak "birim testi" olarak kabul edilebileceğini düşünüyorum. SQL pasajı. Ve dosyanın her modifikasyonunda çalıştırılan (potansiyel) testler grubuna dahil edilmesi makul görünmektedir.
gbr

3
Bu arada, genellikle tavsiye edilen şey, bir sahte dosyayla veya bu yol boyunca bir şeyle ikame edilebildiğinde, harici dosyalara erişmektir. Ve en tanımlara göre birim testleri olabilir o çok şeyler yavaşlatabilir olarak, sadece şiddetle karşı tavsiye edilir, dış dosyaları ya da her neyse erişin. Bir dükkan, dosyalara en sık uygulanan testler grubuna erişen testler ekleyemeyeceğinizi, ancak bu tür testleri "birim testi" tanımlamasına değmez hale getirmediğini, sadece onları yapmayı "önermediğini belirtir. en sık yapılan testlere bu projenin süitinde konulacak ”.
gbr

2
Bu @Warbo olduğu (genel olarak) dosyalara erişmek için kötü bir uygulama ve (en önemli) sebebi "ZD'ne kesintili NFS bağlantının üzerine okuma" içeren eğer yavaş olmamasıdır, bunlar örneğin Michael Tüyler alıntı, eğer yavaş , saniyenin 1 / 10'unu alırlar. Bunun nedeni, testlerinizi olabildiğince sık, IDE'de yaptığınız her değişiklikte ve çok fazla zamanınız olduğunda (olması gerektiği gibi) 10 saniyelik saatlerde biriktirmek istediğinizde yapmak istediğinizdir. (devam ediyor ...)
gbr

1
@Warbo .. Bu, toplam sürelerinin ne kadar önemli olduğunu, bu nedenle küçük kalacağınızdan emin olduğunuz çok küçük bir projeniz varsa, bireysel testlerin hızı konusunda çok daha esnek olabilirsiniz. Ve onları sık sık çalıştırmak istemiyorsanız, bir kabinden bir dosyayı almak ve fakslamak için OPMROC çalışanı çağırmak için bile tamamen özgürsünüz. Ayrıca hala birkaç test yaptırırken daha fazla gevşek olmayı seçebilir ve çok fazla almaya başladıklarında onları hızlandırmak için geri dönebilirsiniz, ancak bunun biriktirdiğiniz bir borç olduğunu göz önünde bulundurmalısınız.
gbr

14

Michael Feathers, kitabında, Eski Kodla Etkili Çalışma:

Endüstride, insanlar sıklıkla belirli testlerin birim testi olup olmadığı konusunda ileri geri giderler. [...] İki niteliğe geri dönüyorum: Test hızlı mı çalışıyor? Hataları hızlı bir şekilde yerelleştirmemize yardımcı olabilir mi?

Testiniz hataları hızlı bir şekilde yerelleştirmenize ve hızlı çalışmanıza yardımcı olur mu? Eğer öyleyse, o zaman yap! Eğer değilse, o zaman yapma! Bu kadar basit!

Olduğu söyleniyor, diğer insanlarla bir ortamda çalışıyoruz ve onlarla iyi geçinmek zorunda. Özel olarak aynı fikirde olmasanız bile, onun yolunda gitmeniz gerekebilir.


Bu iyi bir kuraldır, ancak "birim test" terimini karıştırmak yerine " en sık kullanılan testler grubuna belirli testler ekleyip eklememeyi " yazdıysa , karışıklığı engellerdi.
gbr

1
@gbr Testin sonuçları doğruysa, önemli olan tek şey ne kadar hızlı çalıştığıdır. Her birinin 0.1 yaşın altında yaptığı 100 testim varsa, toplamda 10 saniyeden daha az süreceklerdir. Onları sık sık çalıştırdığım için mutluyum. 1000 test yaptırırsam, 1m40 saniyeye kadar sürebilir. Çok uzun, sık sık çalıştırmayacağım, ancak değişiklikleri 100 testten oluşan küçük bir grupla yaptıktan sonra çalıştırıyorum. Teknik olarak bir kabul testi veya başka bir şey olması umrumda değil. Eğer hataları daha erken bulmama yardım ederse, anlambilimden bağımsız olarak yaparım. Bir test yalnızca çalıştırıldığında değer sağlar.
CJ Dennis,

Çoğunlukla aynı fikirdeyim (bağımsızlık, başka bir önemli şey, örneğin), ancak yine de, Michael Feathers'ın "birim testinin" ne anlama geldiği konusundaki karmaşayı birleştirmemesi daha iyi olurdu. Özellikle bu kargaşayı suçluyor olduğu için değil (ve kitabı, şu ana kadar gözden kaçan kısımlarımda mükemmel). Zaten çok küçük bir noktaya değindim.
gbr

@gbr Birim testlerini yeniden tanımlamıyor, bunun dahil edilme ölçütünüz olmaması gerektiğini söylüyor. Kriteriniz yararlı olmalı ve tanımladığı şey bu.
CJ Dennis,

Bu bölümü tekrar okudum; Emin değilim, bunun (çeşit) bir tanım mı yoksa sadece bir kriter mi olduğu belli değil. Fakat aslında " Hızlı bir şekilde yerelleştirmemize yardımcı olabilir mi? ", Daha önce söylediği şeyleri, izolasyon vb. Hakkında çok iyi ima edebilir. Yani hiçbir şey hakkında bir karışıklık yaratmış olabilirim (yalnız cevabınız hala yanlış yorumlanabilse de)
gbr

10

Bazı durumlarda, kaynak kod dosyalarına, yapılandırma dosyalarına ve benzerlerine karşı benzer testler yazdım. Onlara birim sınaması demem çünkü (a) dosya sistemine erişiyorlar ve ultra hızlı olmayabilirler (b) Her check-in sırasında yürütülmeleri umrumda değil (gecelik olarak CI sunucusu).

Onlara entegrasyon testleri diyebilirsiniz; şüphesiz, bu perspektife ünite testlerinden daha yakındırlar.

Onlar için kendi terimim kaynak testleri . IMHO, bir CI sunucusunda her gece çalıştırılırsa tamamen haklı çıkarlar: asgari maliyet var ve makul şekilde kullanıldığında net bir şekilde değer katıyorlar. Mantıklı bir tanım : Test, soruna neden olan bir sorunu (eğer bahsettiğiniz kodlama gibi) kontrol ediyorsa.


4

Bir birim testi, bir yöntem kodunu veya 'birim kodunu' sınamakla ilgilidir. Yazılımınızdaki en küçük mantık ve kod grubunu test ediyorsunuz.

Daha sonra, diğer birimlerle buna katıldığınızda, entegrasyon testi yapacaksınız.

Umarım takım lideriniz inisiyatifinizi destekledi ve alternatif önerilerde bulunmalıydı. Kesinlikle doğru fikrin var.

SQL'iniz, C # veya Java gibi herhangi bir düşük nesil dilde olduğu gibi koddur ve bu şekilde test edilmelidir. Doğrulama ve onaylama tüm test seviyelerine aittir. Bu nedenle kodlama ve SET ifadeleri dahil edilmiştir, ancak yalnızca özel olarak test edilmeleri gerekmez. Satır sonları veya kuşatmak gibi genel şeyler genellikle sadece bir SCM kancası veya özelliği kullanabilir.

En iyi uygulama, eski böceklerin tekrar ortaya çıkmamasını sağlamak için regresyon testlerinin yapılmasıdır. Genellikle, testler hatanın herhangi bir çözümü ile birlikte oluşturulur. Bu hatalar ünite / entegrasyon veya sistem düzeyinde regresyon testleri ile kapsanmamış ve daha sonra yeniden tanıtılmışsa, bu bir takım problemidir, bireysel problem değil, proses problemidir.

Mesele şu ki ... bir ünite içindeki sözdizimi hataları, eksik ifadeler veya mantık blokları tipik olarak test edilmez. Ünitenin giriş ve çıkışlarını farklı kombinasyonlarda test ediyor, üretilebilecek birçok olasılığı test ediyor.

Eksik SET ifadelerine geri dönersek - test etmek için birçok girdi ve çıktı olasılığını bildirmeye yardımcı olurlar. Herhangi bir seçilmiş SET'i kaçırmamış olsaydınız, BAŞARILACAK hangi testi yazardınız?


"Kod Birimi" testi, birim testine bir yaklaşımdır. Tecrübelerime göre bu kırılgan testlere ve aşırı şişkinliğe (örneğin aşırı alay etmeye) yol açar. Alternatif ve IMHO daha iyi, birim testine yaklaşım "işlevsellik birimi" dir. Bazı işlevselliklerin ("oturum açıldığında çerez tanımlama") bir yöntem veya bir düzine iletişim kurma süreci gerektirip gerektirmediği önemli değildir.
Warbo

@Warbo - Buna entegrasyon testine daha yakın (ancak değil) diyebilirim. Ünite testi aşırı veya büyük herhangi bir şey gerektirmez. Ünite testleri küçük ve hızlı olmalıdır. Aslında işlevsellik ile test etmek tanımladığınız şeye yol açar. 2. son derece eşleşmiş 3. tek bir sorumluluğa sahip değilsiniz.
Ross

3

Ürününüzün bir parçası olan dosyalarınız varsa, içeriklerinin doğru olması gerekir. Bunu doğrulamaman için bir sebep yok. Örneğin, bir klasörde altı 1024 x 1024 görüntüye ihtiyacınız varsa, o zaman elbette tam olarak elinizde olduğunu kontrol eden bir birim testi yazın.

Fakat muhtemelen sadece dosyalarınız yoktur, ayrıca dosyaları okuyan bazı kodlarınız da vardır. Bu kod için bir birim testi yazabilirsiniz. Yukarıdaki örnekte, altı görüntüden birini okuma işlevi bellekte 1024 x 1024 görüntü döndürür (veya neyi üretmesi gerekiyorsa).

Her neyse, bu bir birim testi olmayabilir, ancak yararlı bir testtir. Ve yararlı bir test yapmanıza izin veren bir birim test çerçevesi kullanıyorsanız (bu birim test değildir), neden birim test çerçevesini kullanmıyorsunuz?


2

Belki de sorununuzu yanlış anlıyorum, ama bana bu herhangi bir özel test tarafından değil, sadece sürüm kontrol sistemi tarafından yakalanması gerekmeyen bir problem gibi geliyor . Bir kod tabanında yapılacak herhangi bir değişiklik, taahhütte bulunmadan önce yama bazında gözden geçirilmelidir. Git'te bunu yapmanın basit bir yolu ile değişiklikleri eklemektir

git add -p

Bu, bir metin dosyasındaki her değişiklik için çalışma dizini size gerçekten tutmak isteyip istemediğinizi soracaktır. Bu, örneğin, bu “ilk SETifadelerin” silinmesini görmenize izin verir .

Dosyanın tamamının kodlanması değiştiyse, farklı bir şey olur: algoritma eski ve yeni dosyayı değiştiremez ve bu nedenle git add -phiçbir şey eklemez. Bu daha sonra herhangi bir taahhütte bulunmadan önce yaptığım diğer komutta görülebilir, yani

git status

İşte orada belirten kırmızı renkte vurgulanır dosyayı görürdük olan değişiklikler. Bunların neden bunu başaramadığını araştırmak git add -psorunu hızlı bir şekilde açıklayacaktır .


dua ediyorum, bu aynı sorunu önlemek için herhangi bir gelecek dev nasıl yardımcı olur? ... otomatik testlerle ilgili (iddialar ve sözleşmelere göre tasarım konusunda da geçerli olan), bunların otomatik olarak ermesidir .
vaxquis

@vaxquis aynı problemi önler - bir şekilde tesadüfen, farklı sebeplerden dolayı iyi bir fikir olan bir iş akışının yan etkisi olarak. Demek istediğim , bu sorunun hiç olabileceği , OP ekibinin VCS’lerini iyi bir şekilde kullanmadığını gösteriyor. - Otomatikleştirilmiş testlere karşı hiçbir şey yok, ancak değerleri program mantığındaki zararsız değişikliklerden kaynaklanan anlamsal özellikleri test ediyor. Kaynak kodun değişebileceği her aptalca yolu kontrol etmek değildir .
leftaroundabut

mantığınızla emniyet kemerlerine ihtiyacımız yok; daha dikkatli sürmemiz ve daha az kaza yapmamız gerekiyor ... OP'nin ana noktasını kaçırdınız - insan hatası . VCS Hiçbir miktarda olabilir o sizi korumak . Ayrıca, FWIW: eğer bir test otomatikleştirildiyse, otomatikleştirilmelidir. İnsanlar mühendislik süreçlerinde daima en zayıf halkalardır. gitBunun en iyi örneği - sadece ölümlüler için kullanışsız ama harika bir araç .
vaxquis

@vaxquis Hayır, hayır! Emniyet kemerleri, mantıklı olan testlere benzer: Kazayla ortaya çıkması muhtemel olan çok çeşitli durumları yakalarlar . Dosya kodlama testi, etrafınızdakileri takip eden ve burnunuzu doldurmak suretiyle kendinizi boğmanızı önleyen bir robota benzer olacaktır.
leftaroundabut

OP göre, yanlış biçimde dosyalar olmuş iki kez zaten, bu yüzden görünüşe göre olan kazara meydana gelme olasılığı.
gnasher729

1

Dikkate alınması gereken bir başka açı: Bu iki koşul, programınızın çalışması için gereklilikler olduğundan, mantığı yürütme mantığına yakın bir yere yerleştirmemelisiniz? Demek istediğim: Bir dosyayı okumadan önce varlığını test ediyor ve / veya içeriğini doğrulıyorsun, değil mi? Peki bu nasıl farklı? Bunun bir kod harici kaynağı olduğundan, gerçekte kullanılmadan önce çalışma zamanında doğrulanması gerektiğini düşünüyorum. Sonuç: Daha güçlü bir uygulama, ek testler yazmaya gerek yok.


1
Sadece çalışma zamanında başarısız olmanız onu nasıl daha güçlü bir uygulama haline getirir? Elbette, çalışma kaynağının sorunun kaynağına yakın olması da uygun olabilir , ancak çalışma zamanı sorunlarına yol açmadan önce hataları algılayabiliyorsanız , bu çok daha iyi, değil mi? Otomatik test hakkında bilgi sahibi olduğunuzdan emin misiniz?
gbr

1
"Yalnızca çalışma zamanında başarısız olmak daha güçlü bir uygulama olmasını nasıl sağlar?" Kontrol başarısız olursa bir istisna atın. Testinizde, test edilen kod bölümünün beklenen sonucu verdiğini kontrol edin: bu , başarısızlığın bir nedenini kontrol etmek için yükü kaldırın .
Dr. Gianluigi Zane Zanettini

1
Stratejinizin (neredeyse) genel olarak birim testleriyle ve otomatik testlerle ilgisi yoktur, farklı kullanımlarla farklı bir şeydir.
gbr

1
Bunu önerecektim. Hata bir uygulama detayıdır; Tehlikeli kodlama bağımsız bir dosya yerine özel bir alanda olsaydı, yanıtların çok farklı olacağını hayal ediyorum! OP'nin 2 sorunu varmış gibi geliyor: kaynak dosyaları kötü şekilde kodlanmış olabilir ve prodüksiyon dev'den farklı davranır. Çalışma zamanında dosyayı kullanmadan hemen önce kontrol ederek ikinci sorunu çözüyoruz: dev ve prod aynı hatayı atar. Birim testleri daha sonra uygulama detayları yerine gerçek işlevlere odaklanabilir; bu "iç" kontroller tıpkı özel yöntemler gibi yapılacaktır.
Warbo

1
@ Dr.GianluigiZaneZanettini Bah ... Vazgeçtim ... Gördüğüm gibi, en iyi cevabınız, yorumlardaki "açıklamaların" ardından konu dışıydı (sorunun cevabını değil), ama gerçekte, olduğu gibi, düz yanlış! ek testler yazmaya gerek yok ??? Oy vermeyi reddetmek için yeterli saygınlığım yok, ancak yapmış gibi düşünün. Ve bu sohbete devam etmenin çok değerli olduğunu sanmıyorum.
gbr

1

Testler diğerleriyle aynı koddur ve eğer yeterince karmaşıksa, birim testinden de faydalanır. Bu tür önkoşul kontrollerini doğrudan teste eklemek çok kolay görünüyor.

Testlerin çoğu bunu gerektirmeyecek kadar basit, ancak bazıları yeterince karmaşıksa, bu ön koşul kontrollerinde temel olarak yanlış bir şey göremiyorum. Tabii ki, test onlarsız da başarısız olmalıdır, ancak iyi bir birim testi ayrıca hangi birimin başarısız olduğunu da söyler .

Testin bir parçası olarak kullanılan ve belirli bir içeriğe ve kodlamaya sahip olması gereken bir komut dosyası muhtemelen bir birimdir. Testin geri kalanından çok daha fazla kod ve mantık içerebilir. Böyle bir betiği olan bir test, şimdiye kadarki en iyi tasarım değildir ve mümkünse, daha doğrudan bir şeye yeniden yansıtılmalıdır (eğer entegrasyon testi değilse).


1
Yazar, SQL betiğinin bazı testlerin bir parçası olduğunu hiçbir yerde söylemedi, soruyu yanlış anladınız gibi görünüyor
gbr

Anlaması zor, SQL komut dosyasının testin bir parçası olduğunu varsayıyorum.
h22

yorumunuz ... "zor Orada anlamak"
GbR

Anlaması zor. Sorunun küçültülmesi.
h22

1

Birincisi - testlerin amaçlarından biri sorunların kodunuzda tekrar etmesini önlemektir - bu nedenle kesinlikle bu tür testler yazmaya devam etmelisiniz .

İkincisi - adlandırma zordur. Evet, bunlar açıkça "birim testleri" değildir, ancak yapım sürecinin arzu edilen ve gerekli parçaları olabilirler, çünkü sizi bariz hatalardan korurlar ve hatalar hakkında size geri bildirimde bulundukları için (özellikle siz görmüyorsanız, dev kutusu üzerindeki sonuçlar).

Bu nedenle, soru aslında bu (sizin bağlamınızda olmalıdır), bu testlerin ne olduklarından ve ne zaman yapıldıklarından daha fazla olduğu ile ilgilidir.

Bu tür testleri geçmişte yoğun bir şekilde kullandım - bizi oldukça acı çekti.


Birisi olumsuz oylamayı açıklamak isterse minnettar olurum
Murph

1

Birim testleri, doğru girdi için doğru sonucu ürettiğini doğrulamak için bir birim kodunu yalıtımlı olarak yürütmekle ilgilidir. İzolasyon, hem test edilen birimi hem de testin kendisini tekrarlanabilir kılmalı, yani yan etkilere dayanmamalı veya yan etkilere neden olmamalıdır.

SQL tam olarak yalıtılmış bir şekilde test edilebilecek bir şey değildir, bu nedenle herhangi bir SQL testi tam olarak bir birim testi değildir ve SELECT ifadeleri dışında, bir yan etkiye sahip olacağı kesindir. Buna ünite testi yerine entegrasyon testi diyebiliriz.

Geliştirilebilecek herhangi bir hatanın, geliştirme döngüsünde mümkün olan en erken zamanda tespit edilebildiğinden ve hızlı bir şekilde olabilmesi için kusurun kaynağının tanımlanmasını kolaylaştıracak bir şekilde yapılmasının sağlanması her zaman akıllıca olacaktır. düzeltildi.

Söz konusu testler, “birim testler” in gövdesinden daha uygun bir şekilde yerleştirilebilir ve başka bir yere yerleştirilebilir, ancak izlemek için saatlerce sürebilecek bir kusurun olası girişine karşı koruma gibi yararlı bir şey yapıyorlarsa, tamamen kaldırılmamalıdır. aşağı.

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.