Rastgele testlerden yanayım ve onları yazıyorum. Bununla birlikte, belirli bir yapı ortamında uygun olup olmadıkları ve hangi test paketlerine dahil edilmeleri gerektiği daha nüanslı bir sorudur.
Yerel olarak çalıştırın (örneğin, bir gece geliştirici kutunuzda) randomize testler hataları hem açık hem de belirsiz buldu. Belirsiz olanlar, rastgele testlerin onları temizlemek için gerçekten tek gerçekçi olduğunu düşündüğüm kadar gizlidir. Bir test olarak, randomize testlerle keşfedilen bir bulması zor bir hata aldım ve yarım düzine çatlak geliştiricisinin meydana geldiği işlevi (yaklaşık bir düzine kod satırı) gözden geçirdim. Hiçbiri tespit edemedi.
Rastgele verilere karşı argümanlarınızın çoğu, "test tekrarlanamaz" a lezzetidir. Bununla birlikte, iyi yazılmış bir randomize test, randomize tohumun başlatılması ve başarısızlıkla sonuçlanması için kullanılan tohumu yakalayacaktır. Testi elle tekrarlamanıza izin vermenin yanı sıra, bu test için tohumu kodlayarak belirli bir sorunu test eden önemsiz bir şekilde yeni bir test oluşturmanıza izin verir. Tabii ki, bu durumu kapsayan açık bir testi el ile kodlamak daha iyidir, ancak tembellik erdemleri vardır ve bu da başarısız bir tohumdan yeni test vakalarını otomatik olarak oluşturmanıza izin verir.
Ancak tartışamadığım bir nokta, bunun yapı sistemlerini bozmasıdır. Çoğu derleme ve sürekli entegrasyon testi, testlerin her seferinde aynı şeyi yapmasını bekler. Böylece rastgele başarısız olan bir test kaos yaratacak, rastgele başarısız olacak ve parmakları zararsız olan değişikliklere işaret edecektir.
Daha sonra bir çözüm, hala randomize testlerinizi yapı ve CI testlerinin bir parçası olarak çalıştırmak , ancak sabit sayıda yineleme için sabit bir tohumla çalıştırmaktır . Bu nedenle test her zaman aynı şeyi yapar, ancak yine de bir sürü girdi alanını araştırır (birden fazla yineleme için çalıştırırsanız).
Yerel olarak, örneğin, ilgili sınıfı değiştirirken, daha fazla yineleme veya diğer tohumlarla çalıştırmakta özgürsünüz. Rastgele test daha popüler hale gelirse, rastgele olduğu bilinen, farklı tohumlarla çalıştırılabilen (dolayısıyla zaman içinde artan kapsama alanı ile) ve başarısızlıkların aynı anlama gelmediği belirli bir test paketini bile hayal edebilirsiniz. deterministik CI sistemleri (yani, çalıştırmalar 1: 1 kod değişiklikleri ile ilişkili değildir ve bu yüzden bir şey başarısız olduğunda belirli bir değişikliğe parmağınızı işaret etmezsiniz).
Rastgele testler için söylenecek çok şey var, özellikle iyi yazılmış olanlar, bu yüzden onları reddetmek için çok hızlı olmayın!