Pengujian Otomatis JavaFX

Pengujian Otomatis JavaFX

Uji LogoRRR dengan TestFX

LogoRRR menggunakan TestFX untuk menjalankan pengujian integrasi terhadap antarmuka pengguna JavaFX-nya. Pengujian ini memberikan keyakinan bahwa alur kerja inti tetap terjaga meskipun ada fitur baru, refactoring, dan pembaruan dependensi — serta menangkap regresi yang tidak dapat dilihat oleh pengujian unit.

Mengapa sekarang

Setelah lebih dari 20 rilis, LogoRRR telah tumbuh menjadi cukup kompleks sehingga pengujian manual saja tidak lagi memadai. Codebase membutuhkan jaring pengaman. TestFX memungkinkan untuk mengendalikan jendela aplikasi yang sebenarnya — mengklik tombol, membuka file, memeriksa status UI — dari metode pengujian JUnit.

Keputusan tentang kapan harus berinvestasi dalam pengujian end-to-end selalu merupakan pertukaran (trade-off). Di awal proyek, UI berubah terlalu cepat sehingga pengujian sulit mengimbanginya. Namun begitu alur inti stabil, pengujian menjadi akseleran daripada beban. Titik balik tersebut tiba bersama rilis 24.3.0.

Implementasi

Sintaks Scala yang ringkas secara alami mendukung pembangunan DSL pengujian kecil. Setiap tindakan atomik — membuka file, mengklik tombol tutup, menegaskan bahwa panel tab kosong — menjadi blok bangunan yang mudah dibaca:

@Test def openAndCloseTab(): Unit = {
    checkForEmptyTabPane()
    openFile(path)
    checkForNonEmptyTabPane()
    clickOn(lookup(UiNodes.LogFileHeaderTabs).query[StackPane](), MouseButton.SECONDARY)
    waitAndClickVisibleItem(CloseTabMenuItem.uiNode(fileId))
    checkForEmptyTabPane()
}

Menulis pengujian frontend juga memaksa peningkatan pada kode produksi. Lapisan Service baru ditambahkan untuk mengabstraksi I/O file dan panggilan proses eksternal — perubahan yang meningkatkan arsitektur secara independen dari manfaat pengujian apa pun.

Apa yang ditemukan oleh pengujian

  • Perilaku penutupan aplikasi — sumber daya yang tidak pernah dibersihkan dengan benar menjadi jelas di bawah pengujian
  • Isolasi pengujian — setiap pengujian harus menyiapkan dan membongkar statusnya sendiri, yang mengekspos beberapa asumsi halus tentang status UI bersama
  • Garis dasar performa — mengawasi waktu eksekusi pengujian mencegah akumulasi lambat dari pengujian yang lamban
TestFX menjalankan suite pengujian LogoRRR — interaksi yang sama dengan yang akan dilakukan pengguna, dieksekusi secara otomatis

Foto tajuk oleh Sora Shimazaki di Pexels.