LogoRRR, JavaFX kullanıcı arayüzüne karşı entegrasyon testleri çalıştırmak için TestFX kullanmaktadır. Bu testler, temel iş akışlarının yeni özellikler, yeniden yapılandırmalar ve bağımlılık güncellemelerinden sonra sağlıklı kaldığına dair güvence sağlar — ve birim testlerinin göremeyeceği gerilemeleri yakalar.
Neden şimdi
20’den fazla sürümün ardından LogoRRR, yalnızca manuel testin artık yetmeyeceği kadar karmaşık bir hale gelmişti. Kod tabanının bir güvenlik ağına ihtiyacı vardı. TestFX, JUnit test metotlarından gerçek uygulama penceresini — düğmelere tıklayarak, dosyalar açarak, kullanıcı arayüzü durumunu inceleyerek — yönetmeyi mümkün kılmaktadır.
Uçtan uca testlere ne zaman yatırım yapılacağına karar vermek her zaman bir takas dengesidir. Bir projenin başında kullanıcı arayüzleri testlerin ayak uyduramayacağı kadar hızlı değişir. Ancak temel akışlar bir kez istikrar kazandığında testler yük olmaktan çıkar ve bir ivme kazandırıcıya dönüşür. Bu dönüm noktası 24.3.0 ile birlikte geldi.
Uygulama
Scala’nın özlü sözdizimi, küçük bir test DSL’i oluşturmaya doğal biçimde uyum sağlar. Her atomik eylem — bir dosya açmak, kapat düğmesine tıklamak, sekme bölmesinin boş olduğunu doğrulamak — okunabilir bir yapı taşı haline gelir:
@Test def openAndCloseTab(): Unit = {
checkForEmptyTabPane()
openFile(path)
checkForNonEmptyTabPane()
clickOn(lookup(UiNodes.LogFileHeaderTabs).query[StackPane](), MouseButton.SECONDARY)
waitAndClickVisibleItem(CloseTabMenuItem.uiNode(fileId))
checkForEmptyTabPane()
}
Ön yüz testleri yazmak, üretim kodunda da iyileştirmeleri zorunlu kıldı. Dosya G/Ç ve dış süreç çağrılarını soyutlamak için yeni bir Service katmanı eklendi — bu değişiklikler herhangi bir test faydasından bağımsız olarak mimariyi de geliştirdi.
Testlerin yakaladıkları
- Uygulama kapanış davranışı — hiçbir zaman düzgün temizlenmeyen kaynaklar test altında belirginleşti
- Test yalıtımı — her testin kendi durumunu kurması ve temizlemesi gerekmesi, paylaşılan kullanıcı arayüzü durumuna ilişkin çeşitli gizli varsayımları gün yüzüne çıkardı
- Performans temeli — test yürütme süresine dikkat etmek, yavaş testlerin zamanla birikmesini önler
Başlık fotoğrafı: Sora Shimazaki, Pexels.
