JavaRush /Blog Jawa /Random-JV /JUnit kanggo JavaRush utawa sethithik babagan tes ing oma...
Sdu
tingkat

JUnit kanggo JavaRush utawa sethithik babagan tes ing omah.

Diterbitake ing grup
Bosen ngetik data tes menyang konsol kaping pirang-pirang kanggo mriksa tugas sampeyan? Sugeng rawuh ing kucing, aku bakal ngandhani apa sing bisa ditindakake. Tujuan utama materi iki yaiku ngotomatisasi peluncuran tugas sing ditanggulangi kanthi macem-macem parameter lan mriksa asil tanpa ngganti kode sumber. Kaya sing wis dingerteni saka judhul kasebut, asisten utama kita ing perkara sing rada prasaja iki yaiku JUnit . Yen sampeyan durung krungu babagan tes unit lan tes unit , aku saranake sampeyan istirahat sethithik lan kenal karo konsep kasebut, untunge ana informasi sing cukup ing Internet. Ora, sampeyan ora pengin? Ya, oke, aku mikir iki ora bakal dadi masalah gedhe kanggo ngerti apa sing kedadeyan. Sawise kabeh, sampeyan ngerti apa tes lan tes umume? Sampeyan nindakake iki saben-saben sampeyan miwiti tugas, ketik data dhisikan lan mbandhingaké asil asil karo apa samesthine kanggo ndeleng.
Halo, JUnit donya !
Apa JUnit? Ing situs web resmi proyek , kita bisa maca katrangan ing ngisor iki:
JUnit minangka kerangka prasaja kanggo nulis tes sing bisa diulang. Iki minangka conto arsitektur xUnit kanggo kerangka uji coba unit.
Kanggo kita, iki tegese kemampuan kanggo nulis kelas sing dirancang khusus sing cara bakal sesambungan karo program kita, mbandhingake asil asil karo referensi lan ngandhani yen ora cocog. Kanggo mangerteni prinsip kasebut, coba conto sing prasaja. Upaminipun kita duwe kelas tambahan, salah siji saka cara njupuk rong variabel saka jinis int lan ngasilake jumlah sing: JUnit kanggo JavaRush utawa sethithik babagan tes ing omah.  - 1 Iki fungsi kita bakal nyoba kanggo nyoba. Untunge, IDEA favorit kita wis duwe kabeh sing dibutuhake kanggo nggawe tes kanthi cepet, kabeh sing dibutuhake yaiku nyelehake kursor ing baris deklarasi kelas, penet "Alt + Enter" banjur pilih "Gawe Tes" ing menu konteks: Sawise sampeyan nemtokake JUnit kanggo JavaRush utawa sethithik babagan tes ing omah.  - 2 ngendi sampeyan kudu nggawe test, IDEA nyaranake milih perpustakaan testing (ing materi iki aku nggunakake JUnit4; supaya kelas perpustakaan disambungake menyang project, sampeyan kudu klik tombol "Ndandani"), cara kanggo dites lan tambahan pilihan. JUnit kanggo JavaRush utawa sethithik babagan tes ing omah.  - 3 IDE bakal nggawe template kelas test: ClassName = TestClassName + "Test" MethodName = "test" + TestMethodName JUnit kanggo JavaRush utawa sethithik babagan tes ing omah.  - 4 Kita mung kudu ngisi awak metode. Sing diarani "Assertions" , cara sing diwenehake dening JUnit , bakal mbantu iki . Kanthi cara sing disederhanakake, karyane katon kaya mangkene: asil sing dikarepake lan asil nelpon metode sing diuji diterusake menyang metode .assert*, kanggo penak, sampeyan bisa nambah pesen panjelasan minangka parameter pisanan. Yen paramèter ora cocog sajrone tes, sampeyan bakal dilaporake babagan iki. Sampeyan bisa miwiti kelas test kanggo eksekusi kaya kelas biasa, aku luwih seneng nggunakake kombinasi tombol Ctrl + Shift + F10 JUnit kanggo JavaRush utawa sethithik babagan tes ing omah.  - 5
Ayo nemtokake tugas
Ing teori, kabeh iku prasaja lan ayu, nanging ing konteks conto ngajokaken, iku ora perlu, kita bisa dipercaya komputer kanggo nambah rong nomer. Kita luwih kasengsem babagan kepiye masalah nyata sing ditanggulangi dening siswa JavaRush, contone, aku nyaranake njupuk level05.lesson12.bonus03 sing ditresnani.
/ * Masalah ing algoritma Nulis program sing: 1. ngetik nomer N > 0 saka console 2. banjur ngetik N nomer saka console 3. nampilake maksimum sing ngetik N nomer. */
Kita kudu nulis telung tes, kanggo positif, nomer negatif lan set campuran.
Luwih menyang alas ...
Iki ngendi sawetara kejutan nunggu kita: public class UtilApp { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); //напишите здесь ваш code int n; int maximum; /* Конечно же я не буду размещать решение задачи ;) Код приведенный тут переработан для наглядности, и не в коем случае не означает что он должен присутствовать в "правильном решении" */ System.out.println(maximum); } }
  • Logika program diselehake ing cara utama ().
  • Data sumber ora diterusake menyang metode kasebut, nanging dilebokake saka keyboard.
  • Cara utama () ora ngasilake asil, nanging ngasilake menyang console.
Yen titik pisanan ora utamané masalah (kita bisa nelpon cara utama () minangka biasanipun), banjur loro sabanjuré meksa kita menyang tuwa menyang topik lan ketegangan otak kita. Aku nemokake sawetara solusi kanggo masalah kasebut:
  1. Obah logika kanggo nemokake maksimum menyang cara kapisah.
    • Pros: pendekatan sing bener babagan refactoring
    • Cons: Program dadi overgrown karo kode, struktur rasah, paling array utawa ArrayList ditambahake (gumantung saka rasa lan werna ...). Mung mekanisme kanggo nemokake maksimum sing dites; input lan output data ora dicenthang.
  2. Writing wrappers kanggo System.in/System.out.
    • Pros: Kita ora nggunakake perpustakaan pihak katelu.
    • Cons: Path ora kanggo pamula. Kerumitan relatif saka implementasi tes; jumlah kode ing tes bisa luwih gedhe tinimbang ing tugas sing diuji.
  3. Nggunakake perpustakaan tambahan kanggo tes.
    • Pros: Kode resik ing tes, relatif gampang nulis tes. Kode sumber kelas sing diuji ora diganti.
    • Cons: Perlu nyambungake perpustakaan pihak katelu menyang proyek kasebut.
Jujur, aku paling seneng karo pilihan katelu, mula ayo nyoba ngetrapake.
Aturan Sistem
Panelusuran singkat nuntun aku menyang kaca http://stefanbirkner.github.io/system-rules/ , lan langsung dadi cetha yen iki sing dibutuhake.
Koleksi aturan JUnit kanggo kode testing sing nggunakake java.lang.System.
Dadi, ayo download perpustakaan . Ngundhuh perpustakaan Commons IO sing dibutuhake supaya aturan sistem bisa digunakake . Kita nyambungake perpustakaan loro kasebut menyang proyek kita (File -> Struktur Proyek -> Pustaka -> + -> Java) lan miwiti sculpting: Sawise diluncurake, tugas kita njaluk sampeyan ngetik nomer N + 1 saka console, ing ngendi nomer pisanan ngandhani sampeyan. carane akeh nomer bakal tindakake marang. Ing Aturan Sistem, kelas TextFromStandardInputStream digunakake kanggo tujuan kasebut. Kaping pisanan, kita kudu nambah kolom jinis iki menyang kelas uji lan menehi tandha nganggo anotasi @Rule: @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); Banjur, langsung ing metode uji kita nuduhake data sing dibutuhake: systemInMock.provideText("4\n2\n6\n1\n3\n"); Kaya sing sampeyan ngerteni, angka kasebut ditularake ing wangun teks lan dipisahake dening senar hyphen "\n". Adhedhasar iki, pranyata N bakal padha karo 4, lan kita bakal nggoleki maksimum saka nomer {2, 6, 1, 3}. Sabanjure, kita kudu nggawe conto saka kelas ing test lan nelpon cara utama (). Program kita maca data saka systemInMock, ngolah lan nyithak asil, lan kabeh sing kudu kita lakoni yaiku maca lan mbandhingake karo standar. Kanggo nindakake iki, aturan sistem menehi kita kelas StandardOutputStreamLog. We nambah lapangan saka jinis kasebut: @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); Sampeyan bisa maca data dicithak nggunakake cara .getLog (), nalika sampeyan kudu njupuk menyang akun ngarsane karakter newline, opsi final bisa kaya iki: assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); // or assertEquals("{2, 6, 1, 3}, max = 6", "6\r\n", log.getLog()); Antarane tes, supaya supaya data layering, sampeyan kudu mbusak log log.clear(); Teks lengkap kelas test sandi: import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.StandardOutputStreamLog; import org.junit.contrib.java.lang.system.TextFromStandardInputStream; import static org.junit.Assert.*; import static org.junit.contrib.java.lang.system.TextFromStandardInputStream.emptyStandardInputStream; public class UtilAppTest { @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); @Test public void testAddition() throws Exception { systemInMock.provideText("4\n2\n6\n1\n3\n"); UtilApp utilApp = new UtilApp(); utilApp.main(new String[]{}); assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); systemInMock.provideText("5\n-100\n-6\n-15\n-183\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{-100, -6, -15, -183, -1}, max = -1", "-1", log.getLog().trim()); systemInMock.provideText("3\n2\n0\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{2, 0, -1}, max = 2", "2", log.getLog().trim()); } } We miwiti lan seneng. -=!!! PENTING!!!=- Materi iki disedhiyakake kanggo tujuan informasi ONLY; Aku ora njamin tes sukses tugas ing server yen ana kelas extraneous ing paket karo tugas. Sadurunge ngirim tugas kanggo verifikasi menyang server, mbusak kabeh sing ora perlu: file sing ora perlu, kelas sing ora perlu, kode sing dikomentari. Rampung tes sing wis digawe ora njamin sukses tes ing server. Aku sengaja ora ngunyah materi teoretis: teori testing unit, anotasi JUnit, negesake, lan liya-liyane, kabeh materi ana ing tautan sing kasedhiya ing teks kasebut. Mungkin sampeyan duwe cara dhewe kanggo nyoba tugas, aku bakal seneng ngrembug karo sampeyan ing komentar.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION