Saya sedang mengembangkan aplikasi Java 6 EE dan saya sedang menguji kode jsp saya dengan yang lain dengan versi pengujian dari panggilan fungsi dan kode yang digunakan dalam yang asli tetapi tampaknya longgar dan tidak praktis. Apakah ada cara yang baik untuk menyelesaikan pengujian semacam ini?
12
Jawaban:
Jika Anda belum membaca tentang MVC (model view controller), lakukanlah. Anda seharusnya tidak memiliki kode di JSP, cukup tampilkan. Memasukkan kode di JSP sangat 1900-an.
Namun serius, jika tidak ada kode di JSP, Anda tidak menguji JSP. Anda sedang menguji tindakan / aliran. Maka Anda bisa menggunakan HttpUnit atau Selenium . Perbedaan besar adalah bahwa Selenium menguji dari browser nyata.
sumber
Saya tidak berpikir ada cara yang baik untuk menguji JSP, terutama karena mereka dikembangkan sebelum unit testing menjadi fokus pengembangan.
Robert Martin menulis artikel beberapa tahun yang lalu tentang meretas kompiler JSP sehingga Anda dapat mengarahkan, unit test berbasis non-container. Idenya bagus, tapi itu rusak dengan perilisan besar TomCat berikutnya. Terlalu banyak keajaiban yang terjadi.
Saya tidak setuju dengan ide "hanya jangan tambahkan kode dan Anda tidak perlu mengujinya". SANGAT Anda tidak boleh memasukkan kode ke dalam JSP. Namun demikian, UI yang kompleks sering kali memiliki tampilan logika yang dapat menguntungkan unit yang diuji.
Pertimbangkan contoh ini:
Kode ini sudah difaktorkan dengan baik: logika untuk memutuskan apakah kami menampilkan menu admin tidak ada dalam tampilan. Meskipun demikian, jika ada cara mudah untuk menguji unit JSP, maka kita dapat menulis tes untuk menunjukkan bahwa perilaku yang kita inginkan benar-benar muncul, dan itu akan melindungi kita dari perubahan ke halaman yang secara tidak sengaja membuat menu admin terlihat ketika seharusnya tidak. bisa.
sumber
Ada sebuah program (digunakan oleh server aplikasi apa pun yang Anda gunakan) yang mengkompilasi file .jsp menjadi file .java. Misalnya, versi sun / oracle jspc .
Setelah Anda memiliki .java yang akan dihasilkan oleh terjemahan .jsp (Anda bahkan mungkin ingin mempertimbangkan untuk menggunakan ini sebagai bagian dari proses build - mengkompilasi jsp untuk peningkatan kinerja pada hit pertama), Anda kemudian dapat menjalankan tes terhadapnya. dengan mengejek permintaan dan memverifikasi respons adalah apa yang Anda harapkan.
(sunting dengan contoh :)
Metode kunci untuk ini adalah
_jspService(HttpServletRequest, HttpServletResponse)
metode.Halo halo dunia yang sepele:
(test.jsp terletak di dalam direktori bernama 'webapp' dan juga direktori 'keluar') Ketika dikompilasi dengan perintah
jspc -v -d out -compile -uriroot webapp/ test.jsp
menempatkan ke dalam direktori keluar file yang disebuttest_jsp.java
. File ini ada di dalamnya (bersama dengan sedikit pengaturan konfigurasi lainnya):Pada titik ini, ini merupakan tanda centang untuk memastikan bahwa JspWriter dipanggil dengan tulis atau cetak dan isi panggilannya sesuai dengan yang Anda harapkan.
Semua yang dikatakan, di dunia yang ideal, seseorang seharusnya tidak memiliki logika dalam jsp - logika seperti itu akan berada di controller atau taglibs yang diuji dengan teknik lain.
sumber
Anda juga dapat mempertimbangkan menggunakan kerangka uji unit HTTP seperti HTTPUnit | http://httpunit.sourceforge.net/ .
Poin penting lainnya adalah untuk memisahkan masalah aplikasi Anda.
Misalnya menggunakan teknik seperti TDD (http://en.wikipedia.org/wiki/Test-driven_development), Anda akan merancang tipe untuk diuji.
Jenis yang dikonsumsi dalam JSP akan diuji dalam unit test khusus. Jika ini tidak memungkinkan, Anda harus mensimulasikan interaksi pengguna -> browser (sekali lagi, HTTPUnit alat serupa).
sumber
sumber