Rumah Kewangan Peribadi Menggunakan JUnit - dummies

Menggunakan JUnit - dummies

Isi kandungan:

Video: Java - JUnit testing in Eclipse 2024

Video: Java - JUnit testing in Eclipse 2024
Anonim

JUnit adalah rangka kerja standard untuk menguji unit Jawa (iaitu, kelas Java). JUnit boleh diautomatikkan untuk mengambil beberapa kerja daripada ujian.

Bayangkan anda telah mencipta jenis enum dengan tiga nilai: HIJAU, KUNING, dan RED. Penyenaraian 1 mengandungi kod:

Listing 1

enum awam SignalColor {GREEN, YELLOW, RED}

Lampu lalu lintas mempunyai keadaan (yang merupakan nama mewah untuk warna lampu isyarat).

TrafficLight kelas awam {IsyaratColor state = SignalColor. RED;

Jika anda mengetahui keadaan semasa cahaya lalu lintas, anda boleh memutuskan apakah keadaan seterusnya cahaya lalu lintas itu.

void public nextState () {switch (state) {case RED: state = SignalColor. HIJAU; pecah; kes KUNING: nyatakan = SignalColor. RED; pecah; kes GREEN: state = SignalColor. KUNING; pecah; lalai: state = SignalColor. RED; pecah;}}

Anda juga boleh menukar keadaan lampu isyarat beberapa kali:

perubahan kekosongan awam (int numberOfTimes) {untuk (int i = 0; i 

dalam Penyenaraian 2.

Penyenaraian 2

TrafficLight kelas awam {IsyaratColor state = SignalColor. RED; void public nextState () {switch (state) {case RED: state = SignalColor. HIJAU; pecah; kes KUNING: nyatakan = SignalColor. RED; pecah; kes GREEN: state = SignalColor. KUNING; pecah; lalai: state = SignalColor. RED; break};}} public void change (int numberOfTimes) {for int i = 0; i 

, memanggil kaedah NextState dan menukar dalam Penyenaraian 2. Kemudian, selepas beberapa bulan pengkodan, anda akan berhenti untuk menguji kerja anda.

Dan apa yang mengejutkan! Ujian anda akan berkurangan dengan teruk! Anda tidak harus melambatkan ujian selama lebih daripada satu atau dua hari. Ujian awal dan ujian sering!

Satu falsafah mengenai ujian mengatakan anda harus menguji setiap bahagian kod sebaik sahaja anda menulisnya. Sudah tentu, frasa "potongan kod" tidak terdengar sangat saintifik. Ia tidak akan dilakukan untuk mempunyai pemaju berjalan sekitar bercakap tentang "ujian catur-kod-kod" yang mereka lakukan pada petang ini. Lebih baik memanggil setiap bahagian kod unit , dan dapatkan pemaju untuk bercakap mengenai pengujian unit .

Unit yang paling biasa untuk ujian ialah kelas. Oleh itu, pemaju Java biasa menguji setiap kelas sebaik sahaja kod kelas ditulis.

Jadi bagaimanakah anda menguji sesuatu kelas? Seorang pemula mungkin menguji kelas TrafficLight dengan menulis kelas tambahan - kelas yang mengandungi kaedah utama. Kaedah utama mewujudkan contoh TrafficLight, memanggil kaedah NextState dan perubahan, dan memaparkan hasilnya.Orang baru mengkaji keputusan dan membandingkannya dengan beberapa nilai yang diharapkan.

Setelah menulis kaedah utama untuk berpuluh-puluh, beratus-ratus, atau bahkan beribu-ribu kelas, orang baru (kini pemaju sepenuhnya) menjadi bosan dengan rutin ujian dan mencari cara untuk mengotomatisasi prosedur ujian. Bosan atau tidak, seorang pemaju mungkin cuba untuk menguraikan ujian pemetik tangan yang dikodkan oleh pemaju lain. Tanpa sebarang piawaian atau panduan untuk membina ujian, membaca dan memahami ujian pemaju lain boleh menjadi sukar dan membosankan.

Jadi JUnit datang untuk menyelamatkan!.

Untuk mengetahui bagaimana Eclipse mengotomatikkan penggunaan JUnit, lakukan yang berikut:

  1. Buat projek Eclipse yang mengandungi Senarai 1 dan 2.

  2. Di Windows, klik kanan pada TrafficLight Package Explorer. jawa cawangan. Pada Mac, klik kawalan ControlLight Package Explorer. jawa cawangan.

    Menu konteks muncul.

  3. Dalam menu konteks, pilih New → JUnit Test Case.

    Akibatnya, kotak dialog Kes Ujian JUnit Baru muncul.

  4. Klik Seterusnya di bahagian bawah kotak dialog Kes Ujian JUnit Baru.

    Akibatnya, anda melihat halaman kedua kotak dialog Kes Ujian Baru JUnit. Halaman kedua menyenaraikan kaedah kepunyaan (sama ada secara langsung atau tidak langsung) ke kelas TrafficLight.

  5. Letakkan tanda semak dalam kotak semak berlabel Traffic Light.

    Akibatnya, Eclipse meletakkan tanda pada nextState () dan perubahan (int) .

  6. Klik Selesai di bahagian bawah kotak dialog Kes Ujian JUnit Baru.

    JUnit tidak secara rasmi sebahagian daripada Jawa. Sebaliknya datang dengan kumpulan dan kaedahnya sendiri untuk membantu anda membuat ujian untuk kod anda. Selepas anda mengklik Selesai, Eclipse meminta anda jika anda mahu memasukkan kelas dan kaedah JUnit sebagai sebahagian daripada projek anda.

  7. Pilih Lakukan Tindakan Berikut dan Tambah JUnit 4 Library ke Path Build. Kemudian klik OK.

    Eclipse menutup kotak dialog dan projek anda mempunyai TrafficLightTest yang baru. fail java. Kod fail ditunjukkan dalam Penyenaraian 3.

    Kod dalam Penyenaraian 3 mengandungi dua ujian, dan kedua-dua ujian mengandungi panggilan ke kaedah gagal membunyikan yang tidak menyenangkan. Eclipse mahu anda menambah kod untuk membuat ujian ini berlalu.

  8. Alih keluar panggilan ke kaedah fail. Di tempat panggilan kaedah fail, taip kod yang ditunjukkan dalam huruf tebal dalam Penyenaraian 4.

  9. Di Explorer Package, klik kanan (dalam Windows) atau klik kawalan (pada Mac) TrafficLightTest. jawa cawangan. Dalam menu konteks yang terhasil, pilih Run As → JUnit Test.

    Eclipse mungkin mempunyai lebih daripada satu jenis rangka ujian JUnit sehingga lengannya. Jika ya, anda mungkin melihat kotak dialog seperti yang di bawah. Jika anda lakukan, pilih Eclipse JUnit Launcher, dan kemudian klik OK.

    Akibatnya, Eclipse menjalankan TrafficLightTest anda. program java. Eclipse memaparkan hasil larian di hadapan Explorer Package sendiri. Hasilnya tidak menunjukkan kesilapan dan tiada kegagalan. Whew!

Penyenaraian 3

org statik import. junit. Menegaskan. *; import org. junit. Ujian; public class TrafficLightTest {@Test public void testNextState () {fail ("Not implemented");} @ Test public void testChange () {fail ("Not implemented");}}

Listing 4

import org statik.junit. Menegaskan. *; import org. junit. Ujian; TrafficLightTest kelas awam {@Test public void testNextState () { TrafficLight light = TrafficLight baru (); assertEquals (SignalColor RED, light state); Cahaya. nextState (); assertEquals (SignalColor, GREEN, light state); Cahaya. nextState (); assertEquals (SignalColor, KUNING, cahaya); Cahaya. nextState (); assertEquals (SignalColor RED, light state); } @Test public void testChange () { TrafficLight light = TrafficLight baru (); Cahaya. perubahan (5); assertEquals (SignalColor, KUNING, cahaya); }}

Apabila anda memilih Run As → JUnit Test, Eclipse tidak mencari kaedah utama. Sebaliknya, Eclipse mencari kaedah bermula dengan @Test dan perkara-perkara lain. Gerhana melaksanakan setiap kaedah @Test.

Perkara seperti @Test adalah Java anotasi .

Listing 4 mengandungi dua kaedah @Test: testNextState dan testChange. Kaedah testNextState meletakkan kaedah TrafficStre nextState untuk ujian. Begitu juga, kaedah testChange membekalkan otot kaedah perubahan TrafficLight.

Pertimbangkan kod dalam kaedah testNextState. Kaedah testNextState berulang kali memanggil kaedah NextState kelas TrafficLight dan kaedah AssertEquals JUnit. Kaedah assertEquals mengambil dua parameter: nilai yang dijangkakan dan nilai sebenar.

  • Di dalam panggilan tertinggiEquals panggilan, nilai yang diharapkan ialah SignalColor. RED. Anda mengharapkan cahaya lalu lintas menjadi RED kerana, dalam Penyenaraian 2, anda memulakan keadaan cahaya dengan nilai SignalColor. RED.

  • Di bahagian atas yang menegaskanEquals call, nilai sebenarnya adalah cahaya. nyatakan (warna yang sebenarnya disimpan dalam pembolehubah keadaan lampu isyarat).

Jika nilai sebenar sama dengan nilai yang dijangkakan, panggilan untuk menegaskanEquals berlalu dan JUnit terus melaksanakan kenyataan dalam kaedah testNextState.

Tetapi jika nilai sebenar adalah berbeza daripada nilai yang dijangkakan, assertEquals gagal dan hasil larian memaparkan kegagalan. Sebagai contoh, pertimbangkan apa yang berlaku apabila anda menukar nilai yang dijangkakan dalam panggilan pertama yang dikeluarkan dalam Penyenaraian 4:

@Test public void testNextState () {TrafficLight light = TrafficLight baru (); assertEquals (SignalColor, KUNING, cahaya);

Segera selepas pembinaannya, warna lampu isyarat adalah RED, bukan KUNING. Jadi, kaedah testNextState mengandungi pernyataan palsu dan hasil daripada melakukan Run As → JUnit kelihatan seperti kad laporan buruk kanak-kanak.

Memiliki testNextState sebelum testChange dalam Penyenaraian 4 tidak menjamin bahawa JUnit akan melaksanakan testNextState sebelum melaksanakan testChange. Sekiranya anda mempunyai tiga kaedah @Test, JUnit mungkin akan melaksanakannya dari bahagian atas hingga ke kemuncak, dari jarak jauh ke tahap paling tinggi, dari kaedah pertengahan hingga ke tahap paling tinggi, atau dalam sebarang perintah sama sekali. JUnit mungkin berhenti sejenak di tengah-tengah satu ujian untuk melaksanakan bahagian ujian lain. Itulah sebabnya anda tidak harus membuat andaian mengenai hasil ujian satu ketika anda menulis satu lagi ujian.

Anda mungkin mahu kenyataan tertentu dilaksanakan sebelum sebarang ujian bermula.Sekiranya anda lakukan, letakkan kenyataan tersebut dalam satu kaedah bernama setUp, dan kata laluan dengan kaedah @ Sebelum penjelasan. (Lihat kotak pilihan setUp () dalam angka di Langkah 3 dalam Penyenaraian 2, di atas.)

Berikut adalah berita: Tidak semua menegaskanMesyuarat kaedah dicipta sama! Bayangkan menambah kelas Pemandu ke kod projek anda. "Kelas pemandu" tidak bermaksud pemandu pencetak atau pemandu pile. Ini bermakna seseorang yang memandu kereta - sebuah kereta yang mendekati cahaya lalu lintas anda. Untuk maklumat lanjut, lihat Penyenaraian 5.

Penyenaraian 5

Pemandu kelas awam {halaju dua orang awam (cahaya TrafficLight) {suis (keadaan cahaya) {case RED: return 0. 0; kes KUNING: kembali 10. 0; kes HIJAU: kembali 30. 0; lalai: kembali 0. 0;}}}

Apabila lampu merah, halaju pemacu adalah 0. 0. Apabila lampu berwarna kuning, kereta semakin perlahan 10. 0. Apabila lampu berwarna hijau, kapal pesiar kereta pada halaju 30. 0 <

(Dalam contoh ini, unit halaju tidak penting, mereka boleh menjadi batu sejam, kilometer sejam, atau apa sahaja. kereta di Boston atau New York City. Dalam hal ini, halaju untuk KUNING harus lebih tinggi daripada halaju untuk HIJAU, dan halaju untuk RED tidak seharusnya 0. 0 <)

Untuk membuat ujian JUnit untuk Kelas pemandu, ikuti Langkah 1 hingga 9 yang disenaraikan sebelum ini dalam artikel ini, tetapi pastikan anda membuat perubahan berikut:

  • Dalam Langkah 2, klik kanan atau klik pada kawalan Pemandu. cawangan java bukannya TrafficLight. jawa cawangan.

  • Di Langkah 5, letakkan tanda semak di cawangan Pemandu. Dalam Langkah 8, keluarkan fail kaedah panggilan untuk mencipta kelas DriverTest yang ditunjukkan dalam Penyenaraian 6. (Kod yang anda taip ditunjukkan dalam huruf tebal.)

  • Listing 6

org statik import. junit. Menegaskan. *; import org. junit. Ujian; kelas awam DriverTest {@Test public void testVelocity () {

TrafficLight light = TrafficLight baru (); Cahaya . perubahan (7); Pemandu pemandu = Pemandu baru (); assertEquals (30.0 0, pemandu, halaju (cahaya), 0. 1); }} Sekiranya semuanya berjalan lancar, ujian JUnit berlalu dengan warna terbang. (Untuk menjadi lebih tepat, JUnit berlalu dengan warna hijau!) Oleh itu menjalankan DriverTest bukanlah sesuatu yang baru atau menarik. Apa yang menarik adalah panggilan untuk menegaskanEquals dalam Penyenaraian 6.

Apabila anda membandingkan dua nilai ganda dalam program Java, anda tidak berhak untuk mengharapkan kesamaan pada hidung. Iaitu, salah satu daripada nilai berganda mungkin ialah 300000000000 manakala nilai ganda yang lain adalah lebih kurang 30. 000000001. Komputer hanya mempunyai 64 bit untuk menyimpan setiap nilai ganda, dan ketidakakurapan merayap di sini dan di sana. Jadi dalam JUnit, kaedah assertEquals untuk membandingkan nilai berganda mempunyai parameter ketiga. Parameter ketiga mewakili bilik goyang.

Dalam Penyenaraian 6, pernyataan

menegaskanEquals (30.0, pemandu, halaju (cahaya), 0. 1);

berkata yang berikut: "Menegaskan bahawa nilai sebenar pemandu. halaju (cahaya) berada dalam 0. 1 dari nilai yang dijangkakan 30. 0. Jika ya, pernyataan itu berlalu. Jika tidak, penegasan itu gagal. "

Apabila anda memanggil menegaskanEquals untuk nilai dua kali, memilih margin kesalahan yang baik boleh menjadi rumit.Angka-angka ini menggambarkan jenis perkara yang boleh salah.

Di sini, margin kesalahan anda terlalu kecil.

Di sana, margin kesalahan anda terlalu besar.

Untungnya, dalam contoh DriverTest ini, margin 0. 1 adalah taruhan yang sangat selamat. Inilah sebabnya:

Apabila ujian assertEquals gagal, ia gagal dengan lebih daripada 0. 1.

  • Kegagalan bermakna mempunyai pemandu. halaju (cahaya) seperti 0. 0 atau 10. 0.

    Dalam contoh ini, apabila ujian assertEquals berlalu, ia mungkin mewakili kesetaraan lengkap, pada hidung.

  • Nilai pemandu. halaju (cahaya) datang terus dari pulangan 30. 0 kod dalam Penyenaraian 5. Tiada aritmetik yang terlibat. Jadi nilai pemandu. halaju (cahaya) dan nilai 30. 0 yang dijangkakan sepatutnya sama (atau hampir sama).

Menggunakan JUnit - dummies

Pilihan Editor

Cara Buat Outlet untuk Pengawal Peta di Apl iOS anda - dummies

Cara Buat Outlet untuk Pengawal Peta di Apl iOS anda - dummies

Jika anda mahu menggunakan MapController untuk apl iOS anda, anda memerlukan sebuah saluran keluar. Dengan Pemilih peta anda dijaga, tiba waktunya untuk mencipta saluran supaya MapController mempunyai akses ke paparan Peta untuk memusatkan peta dan mempunyai paparan anotasi. Ikuti langkah berikut:

Bagaimana Membuat Seni Bina Aplikasi iOS - manisan

Bagaimana Membuat Seni Bina Aplikasi iOS - manisan

Senibina aplikasi adalah di mana anda akan bermula dengan pembangunan aplikasi iOS anda. Pada tahap asas, kebanyakan apl terdiri daripada komponen asas yang sama. Kebanyakan aplikasi terdiri daripada yang berikut: Model: Objek model merangkumi logik dan kandungan (data) aplikasi. Views: Kandungan data tidak berguna jika pengguna anda ...

Protein Diet Paleo dan Mengapa Haiwan Matter - manik

Protein Diet Paleo dan Mengapa Haiwan Matter - manik

Manusia, manusia gua dan manusia moden, adalah omnivora . Gaya hidup Paleo membina warisan makan daging. Ahli antropologi bersetuju bahawa nenek moyang kita yang terdahulu adalah pemakan daging, dan saintis menganggarkan bahawa gen kita adalah 99. 9 peratus sama dengan mereka pada masa itu. Daging menyediakan kita dengan protein, asid lemak penting, dan vitamin - sama seperti ...

Pilihan Editor

Bersukacita dengan Perspektif Hak - monyet

Bersukacita dengan Perspektif Hak - monyet

Tidak seperti binatang lain, mengenai pilihan! Anda boleh memilih untuk berbahagia. Anda boleh memilih untuk melihat kehidupan sebagai kaca separuh penuh (optimistik) atau kaca setengah kosong (pesimis). Semuanya datang kepada sama ada anda menentukan masalah sebagai cabaran atau krisis. Mempunyai perspektif yang betul adalah ...

Kebahagiaan: Tahu Kapan Rencana dan Kapan Bukan Untuk - patung

Kebahagiaan: Tahu Kapan Rencana dan Kapan Bukan Untuk - patung

Akhir-akhir ini, manusia memerlukan rancangan untuk semuanya. Adakah rancangan ini menjadikan anda lebih bahagia? Lebih kurang dan lebih sedikit orang boleh melalui hari tanpa BlackBerry. Ibu bapa merancang untuk pendidikan kolej anak-anak mereka apabila anak-anak berada di tadika. Ada perancang persaraan, perancang perjalanan, perancang perkahwinan, dan bahkan ...

Memutuskan apa jenis orangtua yang anda inginkan untuk mencapai kebahagiaan

Memutuskan apa jenis orangtua yang anda inginkan untuk mencapai kebahagiaan

Bagaimana membesarkan anak-anak anda tidak hanya menjejaskan betapa gembiranya mereka; ia memberi kesan kepada bagaimana mereka melakukan persembahan di sekolah, sama ada mereka mengambil merokok, bagaimana mungkin mereka akan mengalami kemurungan, dan sama ada mereka terlibat dalam tingkah laku seksual yang berisiko. Menurut ahli psikologi yang mengkaji hal semacam ini, terdapat empat gaya utama ...

Pilihan Editor

Rakaman Excel Macros dengan Rujukan Mutlak - dummies

Rakaman Excel Macros dengan Rujukan Mutlak - dummies

Mod rakaman lalai excel adalah rujukan mutlak. Apabila rujukan sel dalam formula adalah rujukan mutlak, ia tidak menyesuaikan secara automatik apabila formula disisipkan ke lokasi baru. Cara terbaik untuk memahami bagaimana konsep ini digunakan untuk makro adalah mencuba. Catat makro yang mengira baris ...

Merujuk kepada Nilai atau Rumusan dalam Sel Lain dalam Excel 2007 Formula - dummies

Merujuk kepada Nilai atau Rumusan dalam Sel Lain dalam Excel 2007 Formula - dummies

Menghubungkan formula adalah formula dalam Excel 2007 yang merujuk lokasi dalam lembaran kerja yang sama, buku kerja sama, atau bahkan buku kerja yang berbeza. Apabila anda mencipta formula pautan, ia membawa formula rumit atau asal ke lokasi baru supaya hasil dalam formula pengaudan tetap terikat secara dinamik kepada asal. Jika ...

Rakaman Excel Macros dengan Rujukan Relatif - dummies

Rakaman Excel Macros dengan Rujukan Relatif - dummies

Rujukan relatif dalam makro Excel bermakna relatif kepada sel yang sedang aktif . Oleh itu, berhati-hati dengan pilihan sel aktif anda - kedua-duanya apabila anda merakam rujukan makro relatif dan apabila anda menjalankannya. Pertama, buka Sample File. xlsx boleh didapati dalam talian. Kemudian, gunakan langkah-langkah berikut untuk merakam makro rujukan relatif: Pada ...