Her ikisi de.
Deterministik ve belirsiz olmayan testler, süitiniz için farklı kullanım durumlarına ve farklı değerlere sahiptir. Genel olarak belirsiz olmayan, yavaş yavaş "belirsiz olmayan test hiçbir değer sağlamaz" haline gelen deterministik test ile aynı hassasiyeti sağlayamaz. Bu yanlış. Daha az hassas olabilirler, ancak kendi yararları olan çok daha geniş olabilirler.
Bir örnek verelim: tamsayıların listesini sıralayan bir işlev yazıyorsunuz. Yararlı bulacağınız deterministik birim testlerden bazıları ne olurdu?
- Boş bir liste
- Yalnızca bir öğeye sahip bir liste
- Aynı öğenin tümünü içeren bir liste
- Birden fazla benzersiz öğeye sahip bir liste
- Bazıları yinelenen birden çok öğeye sahip bir liste
- Bir liste ile
NaN
, INT_MIN
veINT_MAX
- Kısmen sıralanmış bir liste
- 10.000.000 öğeden oluşan bir liste
Ve bu sadece bir sıralama işlevi! Elbette, bunlardan bazılarının gereksiz olduğunu veya bazılarının gayri resmi akıl yürütme ile dışlanabileceğini iddia edebilirsiniz. Ama biz mühendisiz ve gayri resmi akıl yürütmenin yüzümüzde patladığını gördük. İnşa ettiğimiz sistemleri tamamen anlayabilecek kadar akıllı olmadığımızı veya karmaşıklığı tamamen kafamızda tuttuğumuzu biliyoruz. Bu yüzden ilk etapta testler yazıyoruz. Belirsiz testler eklemek, tüm iyi testleri bir a priori'yi tanımaya yetecek kadar akıllı olamayacağımızı söylüyor. Yarı rastgele verileri işlevinize atayarak, kaçırdığınız bir kenar durumu bulma olasılığınız çok daha yüksektir.
Tabii ki, bu deterministik testi de dışlamaz. Belirsiz testler, programın büyük alanlarındaki hataları bulmanıza yardımcı olur. Ancak hataları bulduğunuzda, düzelttiğinizi göstermek için yeniden üretilebilir bir yola ihtiyacınız vardır. Yani:
- Kodunuzdaki hataları bulmak için belirsiz olmayan testleri kullanın .
- Kodunuzdaki düzeltmeleri doğrulamak için deterministik testleri kullanın .
Bunun, birim testleri hakkında çok sayıda sağlam tavsiyenin, belirsiz olmayan testler için geçerli olmadığı anlamına geldiğini unutmayın. Örneğin, hızlı olmaları gerekir. Düşük seviyeli özellik testleri hızlı olmalı, ancak "web sitenizdeki düğmeleri rastgele tıklayan bir kullanıcıyı simüle et ve asla 500 hatası almadığınızdan emin olun" gibi belirsiz olmayan bir test, hız üzerinde kapsamlılığı desteklemelidir. Yapım sürecinizden bağımsız olarak böyle bir test yapın, böylece gelişimi yavaşlatmaz. Örneğin, kendi özel sahneleme kutusunda çalıştırın.