10 saniye, tek bir testin çalışması için çok uzun bir süredir. İçimden gelen his, spesifikasyon hedefinizin aynı anda hem birim hem de entegrasyon testleri çalıştırmasıdır. Bu, projelerin içine düştüğü tipik bir şeydir ve bir aşamada, daha fazlasını, daha hızlı üretmek istiyorsanız bu teknik borcun üstesinden gelmeniz gerekecektir . Bunu yapmanıza yardımcı olabilecek birkaç strateji var ... ve geçmişte kullandığım birkaçını önereceğim.
1. Entegrasyon Testlerinden Üniteyi Ayırın
Yapacağım ilk şey, birimi entegrasyon testlerinden ayırmaktır. Bunu şu şekilde yapabilirsiniz:
- Bunları taşıma (spesifikasyon dizini altındaki ayrı klasörlere) - ve tırmık hedeflerini değiştirme
- Bunları etiketleme (rspec, testlerinizi etiketlemenize izin verir)
Felsefe, normal yapılarınızın hızlı olmasını istemenizdir - aksi takdirde insanlar onları sık sık çalıştırmaktan çok mutlu olmayacaktır. Öyleyse o bölgeye geri dönün. Hızlı çalıştırmak için düzenli testlerinizi alın ve daha eksiksiz bir yapı çalıştırmak için sürekli bir tümleştirme sunucusu kullanın.
Entegrasyon testi, harici bağımlılıkları içeren bir testtir (örn. Veritabanı, Web Hizmeti, Kuyruk ve bazıları FileSystem'i tartışabilir). Bir birim testi, yalnızca kontrol edilmesini istediğiniz belirli kod öğesini test eder. Hızlı çalışmalıdır (45 saniyede 9000 mümkündür), yani çoğu bellekte çalışmalıdır.
2. Entegrasyon Testlerini Birim Testlerine Dönüştür
Birim testlerinizin çoğu entegrasyon test paketinizden daha küçükse, bir sorununuz var demektir. Bunun anlamı, tutarsızlıkların daha kolay ortaya çıkmaya başlayacağıdır. Yani buradan, entegrasyon testlerini değiştirmek için daha fazla birim testi oluşturmaya başlayın. Bu süreçte yardımcı olmak için yapabileceğiniz şeyler şunlardır:
- Gerçek kaynak yerine alaycı bir çerçeve kullanın. Rspec, yerleşik bir alay çerçevesine sahiptir.
- Rcov'u birim test süitinizde çalıştırın. Bunu, birim test süitinizin ne kadar kapsamlı olduğunu ölçmek için kullanın.
Bir entegrasyon testini değiştirmek için uygun bir birim testiniz olduğunda - entegrasyon testini kaldırın. Yinelenen test, yalnızca bakımı daha da kötüleştirir.
3. Fikstür Kullanmayın
Fikstür kötüdür. Bunun yerine bir fabrika kullanın (makinist veya fabrika botu). Bu sistemler, daha uyarlanabilir veri grafikleri oluşturabilir ve daha da önemlisi, harici bir veri kaynağından bir şeyler yüklemek yerine kullanabileceğiniz bellek içi nesneler oluşturabilirler.
4. Entegrasyon Testlerine Dönüşen Ünite Testlerini Durdurmak İçin Kontroller Ekleyin
Artık daha hızlı test uyguladığınıza göre, bunun tekrar olmasını DURDURMAK için kontroller koymanın zamanı geldi.
Veritabanına (UnitRecord) erişmeye çalışırken bir hata atmak için aktif kaydı yama yapan kütüphaneler vardır.
Ekibinizi daha hızlı testler yazmaya zorlamaya yardımcı olabilecek eşleştirme ve TDD'yi de deneyebilirsiniz, çünkü:
- Biri kontrol ediyor - bu yüzden kimse tembelleşmiyor
- Uygun TDD, hızlı geri bildirim gerektirir. Yavaş testler her şeyi acı verici hale getirir.
5. Sorunun Üstesinden Gelmek İçin Diğer Kitaplıkları Kullanın
Biri spork'ten (raylar altındaki test takımı için yükleme sürelerini hızlandırır3), hydra / parallel_tests - birim testlerini paralel olarak (birden çok çekirdekte) çalıştırmak için bahsetti.
Bu muhtemelen SON kullanılmalıdır. Asıl sorununuz 1., 2., 3. adımlarla ilgilidir. Bunu çözerseniz, ek altyapıyı devreye almak için daha iyi bir konumda olacaksınız.