Di tempat kerja kami saat ini masih menggunakan JUnit 3 untuk menjalankan pengujian kami. Kami telah mempertimbangkan untuk beralih ke JUnit 4 untuk tes baru yang sedang ditulis tetapi saya telah mengawasi TestNG untuk sementara waktu sekarang. Pengalaman apa yang Anda semua miliki dengan JUnit 4 atau TestNG, dan mana yang tampaknya bekerja lebih baik untuk sejumlah besar pengujian? Memiliki fleksibilitas dalam tes tertulis juga penting bagi kami karena tes fungsional kami mencakup aspek yang luas dan perlu ditulis dalam berbagai cara untuk mendapatkan hasil.
Tes lama tidak akan ditulis ulang karena mereka melakukan tugasnya dengan baik. Apa yang ingin saya lihat dalam pengujian baru adalah fleksibilitas dalam cara penulisan pengujian, pernyataan natural, pengelompokan, dan eksekusi pengujian yang didistribusikan dengan mudah.
TestNG
, ia mendapatkan semua yang Junit miliki, dan banyak lagi!Jawaban:
Saya telah menggunakan keduanya, tetapi saya harus setuju dengan Justin Standard bahwa Anda tidak perlu benar-benar mempertimbangkan untuk menulis ulang tes Anda yang ada ke format baru. Terlepas dari keputusannya, cukup sepele untuk menjalankan keduanya. TestNG berusaha untuk menjadi jauh lebih dapat dikonfigurasi daripada JUnit, tetapi pada akhirnya keduanya bekerja sama dengan baik.
TestNG memiliki fitur yang rapi di mana Anda dapat menandai pengujian sebagai grup tertentu, dan kemudian dengan mudah menjalankan semua pengujian grup tertentu, atau mengecualikan pengujian grup tertentu. Dengan demikian, Anda dapat menandai pengujian yang berjalan lambat seperti pada grup "lambat" dan kemudian mengabaikannya saat Anda menginginkan hasil yang cepat. Saran dari dokumentasi mereka adalah menandai beberapa subset sebagai tes "check in" yang harus dijalankan setiap kali Anda memeriksa file baru. Saya tidak pernah melihat fitur seperti itu di JUnit, tetapi sekali lagi, jika Anda tidak memilikinya, Anda tidak memilikinya. T BENAR-BENAR melewatkannya.
Untuk semua klaimnya tentang konfigurasi tinggi, saya mengalami kasus sudut beberapa minggu yang lalu di mana saya tidak dapat melakukan apa yang ingin saya lakukan ... Saya berharap saya dapat mengingat apa itu, tetapi saya ingin mengungkitnya jadi Anda tahu bahwa itu tidak sempurna.
Keuntungan terbesar yang dimiliki TestNG adalah anotasi ... yang ditambahkan JUnit di versi 4.
sumber
Pertama saya akan mengatakan, jangan menulis ulang semua tes Anda hanya untuk menyesuaikan dengan mode terbaru. Junit3 bekerja dengan sangat baik, dan pengenalan anotasi dalam 4 tidak banyak membantu Anda (menurut saya). Jauh lebih penting bahwa kalian menulis tes, dan sepertinya Anda melakukannya.
Gunakan apa pun yang tampak paling alami dan membantu Anda menyelesaikan pekerjaan.
Saya tidak dapat mengomentari TestNG b / c Saya belum menggunakannya. Tetapi saya akan merekomendasikan unitils , pembungkus yang bagus untuk JUnit / TestNG / DBUnit / EasyMock, terlepas dari rute mana yang Anda ambil. (Ini mendukung semua rasa yang disebutkan di atas)
sumber
Kartu undian terbesar TestNG bagi saya mencakup kelompok uji dukungannya, dan yang lebih penting - ketergantungan kelompok uji (menandai suatu uji sebagai bergantung pada suatu kelompok menyebabkan pengujian tidak berjalan begitu saja ketika kelompok terikat gagal).
Kartu undian besar TestNG lainnya bagi saya termasuk parameter uji, penyedia data, trafo anotasi, dan lebih dari segalanya - komunitas pengguna yang dinamis dan responsif.
Sementara di permukaan orang mungkin tidak berpikir semua fitur TestNG di atas mungkin tidak diperlukan, begitu Anda mulai memahami fleksibilitas yang dibawa ke pengujian Anda, Anda akan bertanya-tanya bagaimana Anda mengatasi JUnit.
(penafian - Saya sama sekali tidak menggunakan JUnit 4.x, jadi saya tidak dapat mengomentari kemajuan atau fitur baru di sana).
sumber
Sekitar setahun yang lalu, kami mengalami masalah yang sama. Saya menghabiskan beberapa waktu untuk mempertimbangkan langkah mana yang lebih baik, dan akhirnya kami menyadari bahwa TestNG tidak memiliki 'fitur mematikan'. Ini bagus, dan memiliki beberapa fitur yang tidak dimiliki JUnit 4, tetapi kami tidak membutuhkannya.
Kami tidak ingin orang merasa tidak nyaman menulis tes sambil mengenal TestNG karena kami ingin mereka terus menulis banyak tes.
Selain itu, JUnit merupakan standar de-facto di dunia Java. Tidak ada alat yang layak yang tidak mendukungnya dari kotak, Anda dapat menemukan banyak bantuan di web dan mereka menambahkan banyak fitur baru di tahun lalu yang menunjukkan bahwa itu hidup.
Kami memutuskan untuk tetap menggunakan JUnit dan tidak pernah melihat ke belakang.
sumber
Salam untuk semua yang di atas. Beberapa hal lain yang secara pribadi saya temukan lebih saya sukai di TestNG adalah:
The
@BeforeClass
untuk TestNG terjadi setelah penciptaan kelas, sehingga Anda tidak dibatasi oleh hanya mampu memanggil metode statis kelas Anda di dalamnya.Tes paralel dan berparameter, mungkin hidup saya tidak cukup ... tapi saya baru saja menulis satu set tes Selenium, menerima nama driver sebagai parameter. Kemudian tentukan 3 grup pengujian paralel, masing-masing 1 untuk pembalap IE, FF dan Chrome, dan tonton balapannya! Saya awalnya melakukan 4, tetapi terlalu banyak halaman yang saya kerjakan merusak
HtmlUnit
driver karena satu dan lain alasan.Ya, mungkin perlu menemukan kehidupan itu. ;)
sumber
Saya ingin membagikan yang saya temui hari ini. Saya menemukan pelari Parameterized built-in cukup kasar di Junit4 dibandingkan dengan TestNG (saya tahu setiap kerangka kerja memiliki kekuatannya tetapi tetap saja). Anotasi Junit4 @parameters dibatasi untuk satu set parameter. Saya mengalami masalah ini saat menguji perilaku yang valid dan tidak valid untuk fungsionalitas di kelas pengujian yang sama. Jadi publik pertama, metode beranotasi statis yang ditemukannya akan digunakan, tetapi dapat menemukannya dalam urutan apa pun. Hal ini menyebabkan kita tidak perlu menulis kelas yang berbeda. Namun TestNG menyediakan cara yang bersih untuk menyediakan berbagai jenis penyedia data untuk setiap metode. Jadi kita dapat menguji unit kode yang sama dengan cara yang valid dan tidak valid di kelas pengujian yang sama dengan menempatkan data yang valid / tidak valid secara terpisah. Saya akan pergi dengan TestNG.
sumber
Juga satu keuntungan lagi dari TestNG adalah mendukung pengujian paralel. Di era multicores kita, ini penting, menurut saya.
Saya juga menggunakan kedua kerangka kerja. Tetapi saya menggunakan hamcrest untuk pernyataan. Hamcrest memungkinkan Anda dengan mudah menulis metode assert Anda sendiri. Jadi, bukan
Kamu bisa menulis
Itu memberi Anda kesempatan untuk menggunakan tingkat abstraksi yang lebih tinggi dalam pengujian Anda. Dan ini membuat pengujian Anda lebih kuat.
sumber
JUnit 4 Vs TestNG - Perbandingan oleh mkyong.com (diperbarui pada 2013).
Kesimpulan: Saya menyarankan untuk menggunakan TestNG sebagai kerangka pengujian unit inti untuk proyek Java, karena TestNG lebih maju dalam pengujian parameterisasi, pengujian ketergantungan dan pengujian suite (Konsep pengelompokan).
TestNG dimaksudkan untuk pengujian fungsional, tingkat tinggi, dan integrasi kompleks. Fleksibilitasnya sangat berguna dengan rangkaian pengujian yang besar.
Selain itu, TestNG juga mencakup seluruh fungsionalitas inti JUnit4 . Tidak ada alasan bagi saya untuk menggunakan JUnit lagi.
Anda dapat menemukan perbandingan yang lebih detail di sini .
sumber
Beberapa tambahan untuk balasan Mike Stone:
1) Hal yang paling sering saya gunakan untuk grup TestNG adalah ketika saya ingin menjalankan metode pengujian tunggal dalam rangkaian pengujian. Saya cukup menambahkan tes ini ke grup "phil" dan kemudian menjalankan grup ini. Ketika saya menggunakan JUnit 3, saya akan mengomentari entri untuk semua metode kecuali yang saya ingin jalankan di metode "suite", tetapi kemudian biasanya lupa untuk menghapus komentar mereka sebelum check in. Dengan kelompok, saya tidak lagi memiliki masalah ini.
2) Bergantung pada kompleksitas pengujian, migrasi pengujian dari JUnit3 ke TestNG dapat dilakukan secara otomatis dengan sed dan membuat kelas dasar untuk menggantikan TestCase yang mengimpor statis semua metode pernyataan TestNG.
Saya memiliki info tentang migrasi saya dari JUnit ke TestNG di sini dan di sini .
sumber
Mengapa kami menggunakan TestNG, bukan JUnit?
Deklarasi
@BeforeClass
dan@AfterClass
metode harus statis di JUnit sedangkan, ada lebih banyak fleksibilitas di TestNG dalam deklarasi metode, ia tidak memiliki batasan ini.Di TestNG, kita dapat melakukan parametrize tes menggunakan 2 cara . Anotasi @Parameter atau @DataProvider.
i) @Parameter untuk kasus sederhana, yang memerlukan pemetaan nilai kunci. (data disediakan melalui file xml)
ii) @DataProvider untuk kasus yang kompleks. Menggunakan array 2 dimensi, Ini dapat menyediakan data.
Di TestNG, karena metode @DataProvider tidak perlu statis, kita dapat menggunakan beberapa metode penyedia data dalam kelas pengujian yang sama.
Pengujian Ketergantungan: Di TestNG, jika pengujian awal gagal, maka semua pengujian dependen berikutnya akan dilewati, tidak ditandai sebagai gagal. Tapi JUnit menandainya gagal.
Pengelompokan: Pengujian tunggal dapat dimiliki oleh beberapa grup dan kemudian dijalankan dalam konteks yang berbeda (seperti pengujian lambat atau cepat). Fitur serupa ada di Kategori JUnit tetapi tidak memiliki anotasi @BeforeGroups / @AfterGroups TestNG yang memungkinkan inisialisasi pengujian / penghancurannya.
Paralelisme: Jika Anda ingin menjalankan pengujian yang sama secara paralel pada beberapa utas, TestNG telah membantu Anda dengan anotasi yang mudah digunakan sementara JUnit tidak menawarkan cara sederhana untuk melakukannya di luar kotak.
TestNG @DataProvider juga dapat mendukung XML untuk memasukkan data, CSV, atau bahkan file teks biasa.
TestNG memungkinkan Anda mendeklarasikan dependensi antar pengujian, dan melewatinya jika pengujian dependensi tidak berhasil.
Fungsi ini tidak ada di JUnit
Laporan TestNG dibuat secara default ke folder keluaran pengujian yang menyertakan laporan HTML dengan semua data pengujian, lulus / gagal / dilewati, berapa lama mereka berjalan, masukan mana yang digunakan dan log pengujian lengkap. Selain itu, ini juga mengekspor semuanya ke file XML yang bisa digunakan untuk membuat template laporan Anda sendiri.
Di bagian depan JUnit, semua data ini juga tersedia melalui XML, tetapi tidak ada laporan out of the box dan Anda harus mengandalkan plugin.
Tautan Sumber Daya:
Perbedaan yang baik diberikan dalam tutorial ini secara berdampingan: TestNG Vs JUnit: Apa Perbedaannya?
sumber
Pertanyaan Anda tampaknya dua kali lipat bagi saya. Di satu sisi Anda ingin membandingkan dua kerangka kerja pengujian, di sisi lain Anda ingin menerapkan tes dengan mudah, memiliki pernyataan alami, dll ...
Ok, pertama JUnit telah bermain mengejar ketinggalan dengan TestNG dalam hal fungsionalitas, mereka telah menjembatani kesenjangan beberapa apa dengan v4, tetapi menurut saya tidak cukup baik. Hal-hal seperti anotasi dan penyedia data masih jauh lebih baik di TestNG. Mereka juga lebih fleksibel dalam hal eksekusi uji, karena TestNG memiliki ketergantungan, pengelompokan, dan pengurutan uji.
JUnit masih memerlukan metode tertentu sebelum / sesudah menjadi statis, yang membatasi apa yang dapat Anda lakukan sebelum menjalankan pengujian, TestNG tidak pernah mengalami masalah ini.
TBH, sebagian besar perbedaan antara kedua kerangka tidak berarti banyak, kecuali jika Anda berfokus pada pengujian integrasi / otomatisasi. JUnit dari pengalaman saya dibangun dari bawah ke atas untuk pengujian unit dan sekarang didorong ke tingkat pengujian yang lebih tinggi, yang menurut IMO menjadikannya alat yang salah untuk pekerjaan itu. TestNG bekerja dengan baik pada pengujian unit dan karena penyediaan data yang kuat dan kemampuan eksekusi pengujian yang hebat, bekerja lebih baik pada tingkat pengujian integrasi / otomatisasi.
Sekarang untuk apa yang saya yakini adalah masalah terpisah, bagaimana menulis tes yang terstruktur dengan baik, dapat dibaca dan dipelihara. Sebagian besar dari ini saya yakin Anda tahu, tetapi hal-hal seperti Pola Pabrik , Pola Perintah , dan PageObjects (jika situs pengujian Anda) sangat penting, sangat penting untuk memiliki lapisan abstraksi antara apa pengujian Anda (SUT) dan apa pengujian yang sebenarnya. adalah (pernyataan logika bisnis). Untuk mendapatkan pernyataan yang jauh lebih bagus, Anda dapat menggunakan Hamcrest . Memanfaatkan javas inheritance / interfaces untuk mengurangi pengulangan dan menegakkan kesamaan.
Hampir lupa, gunakan juga Test Data Builder Pattern , ini digabungkan dengan anotasi penyedia data TestNG sangat berguna.
sumber
Pendapat saya tentang apa yang membuat TestNG benar-benar jauh lebih kuat:
sumber