Menggunakan variabel 'final' dalam tes Java Selenium
Ini mungkin dianggap sebagai pertanyaan pemrograman, tetapi ini tentang kode uji, yang ditulis dalam Selenium plus Java, jadi menurut saya ini adalah situs yang relevan untuk memposting ini.
Saat melihat pengujian orang lain secara online, terkadang saya menemukan elemen web ditambahkan ke variabel yang dinyatakan sebagai final:
final WebElement element = driver.findElement(By.id("element-id"));
Saya menduga itu memungkinkan atomisasi dan isolasi tes yang lebih baik dan itu masuk akal.
Karena saya tidak memiliki masalah dengan tidak mendeklarasikan variabel final, apakah ada alasan lain untuk melakukan ini?
Jawaban
Ini adalah praktik pemrograman standar yang dimaksudkan untuk mengurangi bug dalam kode. Sebagai penyegar, pengubah terakhir mencegah variabel primitif atau variabel referensi objek untuk ditetapkan kembali. Jadi, primitif tidak bisa diubah, dan sebuah referensi bisa menunjuk ke objek yang awalnya ditunjuknya. (Ini tidak memengaruhi metode apa yang dapat Anda panggil, bahkan metode yang akan mengubah status internal objek.)
Setiap IDE yang saya gunakan dalam 10 tahun terakhir memiliki kemampuan untuk memeriksa kode dalam sebuah metode dan secara deterministik menerapkan pengubah terakhir ke variabel lokal yang tidak ditetapkan ulang setelah diinisialisasi. Ide di balik ini adalah bahwa jika Anda menulis kode, dan menyimpannya (yang menjalankan tindakan simpan yang menerapkan pengubah akhir), Anda mungkin tidak bermaksud mengubah variabel itu lagi. Jika Anda DO berniat untuk mengubah variabel itu, Anda cukup menghapus pengubah. Di bawah logika ini, setiap variabel bersifat final sampai seseorang secara aktif memutuskan bahwa itu tidak seharusnya.
Seperti halnya semua hal pemrograman, ada argumen balasan untuk ini. Salah satunya adalah mengacaukan kode, meningkatkan beban kerja pemrogram yang mencoba membaca kode untuk memeliharanya. Meskipun ini bukan pengalaman pribadi saya dengan pengubah ini, saya tahu ini telah terjadi dengan praktik lain untuk saya, jadi saya tidak ingin mengabaikan ini secara langsung hanya karena itu tidak berlaku untuk saya. Yang lainnya adalah jika Anda hanya menggunakannya pada variabel yang Anda putuskan harus final (bukan menyelimuti kode dengan final), Anda mengirim pesan ke pengembang lain bahwa variabel ini tidak boleh berubah - variabel ini harus menonjol di antara yang lain variabel sebagai salah satu yang tidak boleh Anda coba ubah.
Komentar PDHide tentang pembatasan penggunaan eksekusi paralel terkait - variabel final memenuhi syarat untuk digunakan dalam lambda dan pemrosesan paralel sementara variabel lain tidak. Sekarang saya percaya (sudah lama) compiler Java akan memungkinkan Anda untuk menggunakan variabel yang secara efektif final meskipun tidak secara eksplisit final tetapi kemudian jika seseorang memutuskan untuk memodifikasi variabel sebelum eksekusi paralel, kompilator tidak dapat lagi mengatakan bahwa itu secara efektif final dan dengan demikian tidak lagi memenuhi syarat untuk pemrosesan paralel dan akan menimbulkan kesalahan kompilasi. Mudah diperbaiki, namun bisa mengganggu.
Di penghujung hari, Anda ingin melakukan percakapan singkat dengan tim Anda untuk memutuskan apa yang paling cocok untuk Anda. Kata kunci tidak memiliki pengaruh apa pun pada eksekusi atau efisiensi aktual, dan itu semua adalah masalah produktivitas pemrogram.