Birim Testi-

4 Cevap php

Ben ve benim co-işçi bizim PHP / MySQL uygulamasında birim test hakkında geçen gece bir anlaşmazlık biraz vardı. Bize yarım birim bir sınıf içinde bir işlev test ederken, o sınıf ve anne dışında her şeyi alay gerektiğini savundu. Bize diğer yarısı ya sınıfının doğrudan bağımlılığın herhangi bir şey alay gerektiğini savundu.

Spesifik örnek statik Günlüğü sınıfı aracılığıyla oldu bizim günlük mekanizma, oldu, ve biz günlüğünü :: günlüğüne bir dizi vardı () bizim uygulama boyunca çeşitli yerlerde çağırır. Bize ilk yarısı Günlüğü ünite testleri test olacaktır çünkü Günlüğü mekanizması (alay) sahte olması gerektiğini söyledi. Bize ikinci yarısı bizim günlük arabirimine bir değişiklik yaparsanız, biz nedeniyle kaybetti uygulamanın diğer bölgelerinde sorunlar yaratır olmadığını görmek mümkün olacak, böylece bizim birim test orijinal Günlüğü sınıfı içermelidir savundu çağrı arayüzü güncellemek için.

Ünite testleri kapalı bir ortamda tek bir birimin işlevselliğini sınamak, ya da daha büyük bir ortamda tek bir birim değişikliklerin sonuçlarını göstermek için hizmet yok - Yani temel soru sanırım? Bu biri varsa, nasıl diğer başarırız?

4 Cevap

Siz ve arkadaşlarınız ünite testleri ve entegrasyon testleri arasındaki farkın tökezledi. Alaycı her şey eski için bitmiş olacaktır; alaycı değil bağımlılıkları ikincisi için bitmiş olacaktır.

Tabii ki, ayrıntı için çizgiyi, çok çeşit öznel - ama birim test için ayrıntı iyi seviyesinde, her testin belirli bir konu dışında hiçbir şey hakkında endişe edilmemelidir.

Test birimi bir elektronik cihaz tek bir bileşen test gibidir.

Eğer bir gitar amfi tek bir transistör test etmek istiyorsanız, size bir gitar takın sesini açın ve yayılan sesleri kontrol yok. Bu aptalca olurdu. Bir transistör kontrol etmek için, that transistor bir yol ekipman kanca ve girişler ve çıkışlar, sadece ölçmek.

Bir noktada (gitar gürültü, vb) yapar şeyi test edin, ama bu tek bir transistör test farklı bir şey.

Kelimeleri cevap olarak bazı ipuçları verebilir:

1 ünitesi demektir: Eğer bir şeyi test etmek için çalışıyoruz. Senin testlerin birincil odak değilken günlük çerçeve gibi bağımlılıkları alay edebilirsiniz. Ünite bağımlılıkları ile etkileşim içindedir test edilen ne sıklıkta test davanın parçası olduğunu, ve alaycı bu çok daha kolay hale getirir.

Birlikte bir bütün olarak bir testi birden fazla şeyi birleştirmek için çalışıyoruz: entegrasyon, birden fazla şey bir araya geliyor demektir. Alaycı daha az bir rol oynar, ama yine de test senaryosunda kurmak zor olacaktır bakmakla taklit için yararlı olabilir.

Ben değişiklikler şey kırmak olmadığını görmek için, ünite testleri günlük sistemini alaycı değil argüman oldukça zayıf olduğunu söyleyebilirim. Şey günlüğü sistemde kırılırsa, o günlüğü sistemi için başarısız birim testi ile yakalanmış olması gerekir.

Birimini tutulması, basit, net ve odaklı testleri başparmak iyi bir kuraldır. Testlerin kapsamını genişletirken Yuu simplicty bu kayaya gerekir. Entegrasyon testleri hızla birim testleri için eksik yerine olarak onları kullanarak, özellikle karmaşık olabilir - bu "bir mesafeden test" ve uzak bir bileşen hareket daha fazla gibi, daha zor bir testtir ve arızaları teşhis. Bir birim testi ile uzak bir bağımlılık test bir olta kullanarak odanın diğer taraftan tv-uzaktan çalıştırmak için çalışan bir kişi gibidir.

@ David, ben senin için birim test onun yapmak gerekiyordu iş yaptığını görüyoruz.

Eğer yazılım tasarım üzerine yansıtan.

Eğer açık bir ortamda karşı kapalı bir ortamda ilgili soru poz konum yoldan, inanmak için bana yol açacak sizin kodunuz için devlet-merkezli davranışa karşı birim test soruyu cevaplamak zorunda doruk.

Gerçek bir nesne ya da birim test için bir mock kullanmak için ne zaman sabit kuralı yoktur. ONLY GUIDING PRINCIPLES! Gerçek bir Logging nesne ile birim test problemi bu nesne için testler nesneler için logger için birim testleri değil, aynı zamanda birim testleri değil sadece olmasıdır logger kullanarak.

Eğer logger kullanımı 20 nesneleri ve logger arayüzünü değiştirmek olacak Yani en az 21 testleri başarısız oldu. Üstlenmeden Bu oldukça zaman ağrı olabilir. Ama flip tarafında size 20 nesneler ünite testleri logger sınıfı kullanmayın ve size sadece üretimde başarısız olsa bile, bir, testi ve yeşile diğer 20 ünite testleri başarısız olması logger arayüzünü değiştirmek durumunda.

Gerçekten sana verebilirim sadece içgörü yerinde doğru soyutlamalar yok olmasıdır. Sen SOLID bakmak isteyebilirsiniz. Bu guiding principles. olmalıdır

Sorular sizin kod size geri veriyor soran gibi gelip zaman unutmayın. Bu geribildirim kulak. Bu size daha sonra ağrı çok yarayacaktır.