Ne olduğunu bir birim gerçekten test? Burada gerçekten büyük bir ikilik var mı?
Tam anlamıyla bir arabellek sonuna kadar bir bit okumanın bir programı tamamen çökertebileceği veya tamamen yanlış bir sonuç üretmesine neden olabileceği veya son zamanlarda yapılan "HeartBleed" TLS hatasıyla kanıtlandığı gibi, güvenli bir sistem ortaya koyduğu bir alanda çalışıyoruz. kusurun doğrudan bir kanıtı olmadan açıktır.
Bu sistemlerden tüm karmaşıklığı ortadan kaldırmak imkansızdır. Ancak işimiz, mümkün olduğu ölçüde, bu karmaşıklığı en aza indirmek ve yönetmek.
Bir ünite testi, örneğin, üç farklı sistemde rezervasyonun başarıyla gönderildiğini, bir günlük girişi oluşturulduğunu ve bir E-posta onayı gönderildiğini doğrulayan bir test midir?
Ben diyeceğim yok . Bu bir entegrasyon testi. Ve kesinlikle onların yeri var, ama aynı zamanda farklı bir konu.
Entegrasyon testi, tüm "özelliklerin" genel işlevini doğrulamak için çalışır. Ancak bu özelliğin arkasındaki kod, basit, test edilebilir yapı taşlarına, yani "birimlere" ayrılmalıdır.
Bu yüzden, bir birim testin kapsamı çok sınırlı olmalıdır.
Bu , birim test tarafından test edilen kodun çok sınırlı bir kapsama sahip olması gerektiği anlamına gelir .
Bu ayrıca, iyi tasarımın sütunlarından birinin, karmaşık sorununuzu birbirinden göreceli olarak ayrı ayrı test edilebilen daha küçük, tek amaçlı parçalara (mümkün olduğu ölçüde) bölmek olduğunu ima eder.
Sonuçta, güvenilir temel bileşenlerinden oluşan bir sistem var ve bu temel birim birimlerinden herhangi birinin kesilip kesilmediğini biliyorsunuz çünkü tam olarak bunu söylemek için basit, küçük, sınırlı kapsamlı testler yazdınız.
Çoğu durumda, muhtemelen birim başına birden fazla testiniz olmalıdır. Testlerin kendileri basit olmalı ve mümkün olduğu kadar sadece bir davranışı test etmelidir.
Önemsiz, ayrıntılı, karmaşık mantığı test eden bir "birim test" kavramı, sanırım biraz oksimoron.
Kasıtlı tasarım ayrışması sonunda bu tür gerçekleştikten Yani eğer, o zaman nasıl dünyada bir birim test aniden yanlış pozitif üretme başlayabileceğini sürece test kod biriminin temel fonksiyonu değişti? Ve eğer bu olduysa, oyunda belirgin olmayan dalgalanma etkileri olduğuna inanmanız daha iyi olur. Yanlış pozitif üretiyor gibi görünen kırık testiniz aslında bazı değişikliklerin kod tabanında daha geniş bir bağımlılık çemberini kırdığı ve incelenmesi ve düzeltilmesi gerektiği konusunda sizi uyarıyor.
Bu birimlerin (birçoğunun) sahte nesneler kullanılarak test edilmesi gerekebilir, ancak bu daha karmaşık veya ayrıntılı testler yazmanız gerektiği anlamına gelmez.
Rezervasyon sistemiyle ilgili tartışmalı örneğime geri dönersek , kodunuzu her birim test ettiğinizde canlı bir rezervasyon veritabanına veya üçüncü taraf hizmetine (hatta "dev" örneğine) istek gönderemezsiniz .
Yani aynı arayüz sözleşmesini sunan alayları kullanın. Testler daha sonra nispeten küçük, deterministik bir kod yığınının davranışını doğrulayabilir. Tüm tahtadaki yeşiller size temelinizi oluşturan blokların kırılmadığını söyler .
Ancak, bireysel ünite testlerinin mantığı mümkün olduğunca basit kalır.