Geliştiriciden iyi bir birim testine sahip olmamanın ana bahanesi "Kod, test edilebilir bir şekilde tasarlanmamıştır" dır. Ne tür bir tasarım ve kodun ünite test edilemeyeceğini anlamaya çalışıyorum.
Geliştiriciden iyi bir birim testine sahip olmamanın ana bahanesi "Kod, test edilebilir bir şekilde tasarlanmamıştır" dır. Ne tür bir tasarım ve kodun ünite test edilemeyeceğini anlamaya çalışıyorum.
Yanıtlar:
Birkaç faktör kodun birim testini zorlaştırabilir. Bu durumda, refactoring, test edilebilir olması için kodu iyileştirmeye yardımcı olur.
Muhtemelen test edilmesi zor olan bazı kod örnekleri:
function pGetDp_U(int i, int i2, string sText)
.Açık mimari eksikliğinin kodun birim testini zorlaştırmayacağına dikkat edin, ünite testleri kodun küçük bölümleriyle ilgilidir. Belirsiz mimarlığın entegrasyon ve sistem testleri üzerinde hala olumsuz bir etkisi olacaktır.
Üniteyi test etmeyi zorlaştıran bir çok şey var. Tesadüfen, çoğu da kodun korunmasını zorlaştırıyor:
Genel kod örnekleri, birim testi yapmak istemiyor:
Sahte bir çerçeve kullanarak, bu örneklerin tümü birim test edilebilir. Sadece iç bağımlılıklar için sahte değiştirmeleri ayarlamak işe yarıyor.
Gerçekten birim test edilemeyen şeyler:
Bunlar ünite testleri yazmayı zorlaştıracak birkaç alandır. Bununla birlikte, testinize biraz karmaşıklık katabilecekleri için kullanışlı teknikleri elden indirmeniz gerektiği anlamına gelmediğini vurguluyorum. Herhangi bir kodlama olduğu gibi size faydalar maliyetleri outway olmadığını belirlemek için kendi analizini yapıyor olmalı ve körlemesine net neyi bazı rasgele adam kabul etmeyen.
Ne yaptığınızı bilmiyorsanız, bu spirallerin çoğunun maliyeti kontrolden çıkar. Ne yazık ki, çoğu kişi bu teknikleri, karmaşıklığı test etmek gibi şeyleri hafifletmek için nasıl kullanacağını bilmez.
Test edilemeyen kod diye bir şey yoktur. Bununla birlikte, GERÇEKTEN, GERÇEKTEN zor test edilebilecek birkaç kod örneği vardır (muhtemelen çabaya değmeyecek kadar):
Donanım etkileşimleri - Kod, donanımı doğrudan yönetiyorsa (örneğin, bir fiziksel aygıtı taşımak için bir kayıt defterine yazma), birim test etmek çok zor veya pahalı olabilir. Test için gerçek bir donanım kullanıyorsanız, bu test donanımına uygun geri bildirim almak için daha pahalı olabilir (yine de daha fazla ekipman!) Ve eğer yapmazsanız, fiziksel nesnelerin tam davranışını taklit etmeniz gerekir - küçük bir hile yapmak yok Bazı örnekler
Saat etkileşimleri - Bu genellikle daha kolaydır, çünkü sistem saati işlevlerini oldukça önemsiz bir şekilde çıkarmak neredeyse her zaman mümkündür. Ancak, yapamadığınızda, bu testler yönetilemez hale gelir - gerçek zamana dayanan testlerin çalışması uzun zaman alır ve benim deneyimlerime göre sistem yükleri işleri gereğinden uzun sürdüğü için çok kırılgan olma eğilimindedirler. , hayalet test başarısızlıklarına neden olur.
Bunun için üç ana grubum:
harici servislere dayanan kod
Test cihazlarının uygulamadan bağımsız olarak durumlarını değiştirmelerine izin vermeyen sistemler.
üretim kurulumunu çoğaltmayan ortamları test edin.
Bu, bir geliştirici olarak QA mühendisine dönüştüğünde en çok yaşadığım şeydi.