CodeGym /Blog Jawa /Acak /Unit Testing ing Jawa karo JUnit
John Squirrels
tingkat
San Francisco

Unit Testing ing Jawa karo JUnit

Diterbitake ing grup

Apa tes unit ing Jawa?

Sadurunge sinau babagan JUnit ing basa Jawa, ayo dideleng kanthi ringkes apa tes unit kasebut lan kenapa dadi populer (yen sampeyan ngerti babagan iki, pindhah menyang 'Kepiye carane nulis Tes JUnit ing Jawa?'). Pengujian unit ing Jawa ndadekake pangembangan piranti lunak skala gedhe luwih efisien lan gampang. Bisa mbantu loro individu, lan tim ngilangi jam sing ora kaetung saka debugging lan nyepetake proses kolaborasi kanthi apik. Pengujian Unit ing Jawa nganggo JUnit - 1

https://junit.org/junit4/

Ide penting saka tes unit yaiku: nulis tes atom saka fitur individu (disebut tes unit) lan alon-alon nambah fitur liyane sawise nyoba lan njamin sing sadurunge bisa digunakake. Iki minangka ide sing gampang banget nanging kuat. Minangka conto carane proses iki katon, bayangake sampeyan lagi mbangun kalkulator ilmiah virtual. Ing ndhuwur operator aritmetika sing katon ( +, -, x, %), kalkulator iki bakal duwe fitur canggih sing mbutuhake subfitur liyane kanggo bisa digunakake. Kanggo ngetung eksponen, kalkulator sampeyan kudu bisa multiply kanthi bener. Dadi pendekatan tes unit kanggo mbangun lan nguji kalkulator iki yaiku:
  • Tulis fungsi tambahan. Tes kasebut kanthi teliti, ganti, baleni nganti bisa.
  • Tumindak sing padha kanggo fungsi subtraction, multiplication, division.
  • Gunakake operator dhasar iki kanggo nulis fungsi operator sing luwih maju kaya eksponen, banjur nyoba fungsi kasebut uga.
Iki mesthekake yen fitur sing nggawe subfitur cilik liyane ora mung bisa digunakake kanthi bener nanging ora duwe subfitur sing salah. Contone, yen aku nyoba fungsi eksponen lan ana sing salah, aku ngerti manawa bug kasebut ora ana ing subfitur multiplikasi, amarga fungsi multiplikasi wis diuji kanthi ekstensif. Iki ngilangi jumlah total kode sing kudu daklacak lan mriksa kanggo nemokake bug kasebut. Muga-muga, conto sing ora pati penting iki nggawe jelas kepiye proses mikir babagan Pengujian Unit wis kabentuk. Nanging kepiye carane tes unit sesambungan karo proses pangembangan piranti lunak liyane? Apa yen sampeyan duwe fitur sing luwih rumit, sing kudu bisa kerja lan komunikasi bebarengan? Pengujian unit ora cukup kanggo mesthekake yen fitur kompleks kasebut bisa digunakake kanthi bener. Nyatane, iku mung langkah pisanan saka Papat Tingkat Pengujian Piranti Lunak (Aku nggunakake huruf kapital amarga aku ngrujuk marang standar industri utawa pendekatan sing paling umum kanggo nguji piranti lunak). Telung langkah pungkasan yaikuPengujian Integrasi , Pengujian Sistem , lan Pengujian Penerimaan. Iki kabeh bisa uga tegese persis apa sing sampeyan pikirake, nanging supaya aku njlentrehake: Pengujian integrasi yaiku apa sing bakal ditindakake kanggo njamin sing kasebut ing ndhuwur, "fitur kompleks," kanthi bener sesambungan karo siji liyane. (contone, mesthekake yen kalkulator bisa nangani "3 + 7 * 4 - 2") Tes sistem nguji rancangan sakabehe sistem tartamtu; asring ana macem-macem sistem fitur komplèks makarya bebarengan ing produk, supaya sampeyan klompok iki menyang sistem lan nyoba wong siji. (contone, yen sampeyan nggawe kalkulator grafik, sampeyan kudu mbangun 'sistem' aritmetika kanggo ngatasi angka, nguji nganti bisa digunakake kaya sing dikarepake, banjur sampeyan bakal mbangun lan nguji 'sistem' grafik kanggo ngatasi penarikan, minangka bakal dibangun saka sistem aritmetika). Pengujian panrima yaiku pangujian tingkat pangguna; iku ndeleng manawa kabeh sistem bisa nyelarasake kanggo nggawe produk rampung sing siap ditampa dening pangguna (contone, pangguna nyoba kalkulator). Pangembang piranti lunak kadhangkala bisa nglirwakake langkah pungkasan proses kasebut, amarga perusahaan asring duwe karyawan liyane sing nggunakake tes pangguna (beta) kanthi kapisah.

Kepiye carane nulis tes JUnit ing Jawa?

Saiki sampeyan duwe gagasan sing luwih jelas babagan keuntungan lan watesan saka testing unit, ayo goleki sawetara kode! Kita bakal nggunakake framework testing Java populer disebut JUnit (siji liyane populer TestNG, sing uga bisa digunakake yen seneng. Padha banget padha, syntactically; TestNG inspirasi dening JUnit). Sampeyan bisa ngundhuh lan nginstal JUnit kene . Kanggo kode conto iki, kita bakal nerusake saka conto 'kalkulator ilmiah' sing dakkandhakake sadurunge; iku cantik prasaja Lebokake sirah watara, lan kode test super gampang. Praktek konvensional yaiku nulis kelas tes sing kapisah kanggo saben kelas sampeyan, mula sing bakal ditindakake. Ayo nganggep manawa ing titik iki, kita duwe Math.javafile kanthi kabeh fungsi matematika (kalebu Math.add), lan kita nulisMathTests.javafile ing paket sing padha. Saiki ayo nyiyapake statement impor lan awak kelas: (MUNGKIN JUnit INTERVIEW QUESTIONS: Sampeyan bisa uga ditakoni ngendi kanggo nyelehake test JUnit lan apa sampeyan kudu ngimpor file sumber sampeyan utawa ora. Yen sampeyan nulis kelas test ing paket sing padha karo kelas utama sampeyan, mula sampeyan ora mbutuhake pernyataan impor kanggo file sumber ing kelas tes. Yen ora, priksa manawa sampeyan ngimpor file sumber sampeyan!)

import org.junit.jupiter.Test;    //gives us the @Test header
import static org.junit.jupiter.api.Assertions.assertEquals; //less typing :) 

public class MathTests {
	//...
}
Pernyataan impor pisanan menehi kita @Testheader. Kita nulis ' @Test' langsung ing ndhuwur saben definisi fungsi tes, supaya JUnit ngerti yen iki minangka tes unit tunggal sing bisa ditindakake kanthi kapisah. Mengko, aku bakal nuduhake sampeyan carane sampeyan bisa mbukak tes unit tartamtu nggunakake header iki. Pernyataan impor kaloro nylametake kita ngetik. Fungsi JUnit utami sing digunakake kanggo nguji fungsi kita yaiku Assert.assertEquals(), sing njupuk rong paramèter (nilai nyata lan nilai sing dikarepake) lan mesthekake yen padha. Duwe statement ngimpor kaloro iki ngidini kita mung ngetik ' assertEquals(...' tinimbang kudu nemtokake saben paket sing dadi bagéan saka. Saiki ayo nulis kasus uji sing gampang banget kanggo verifikasi manawa 2 + 2 pancen 4!

import org.junit.jupiter.Test; // gives us the @Test header
import static org.junit.jupiter.api.Assertions.assertEquals; // less typing :) 


public class MathTests {
	@Test
	public void add_twoPlusTwo_returnsFour(){
	final int expected = 4;
	final int actual = Math.add(2, 2);
	assertEquals(“2+2 is 4”, actual, expected);
	}
}
Ayo dadi pindhah liwat saben limang baris fungsi test lan apa padha nindakake: Line 5: @TestHeader iki nemtokaken sing definisi fungsi ing ngisor iki add_twoPlusTwo_returnsFour()pancen fungsi test sing JUnit bisa mbukak dhewe. Baris 6: Iki minangka tandha fungsi kanggo kasus uji kita. Kasus tes tansah tunggal banget; padha mung nyoba siji conto tartamtu, kayata 2 + 2 = 4. Iku konvensi kanggo jeneng kasus test ing wangun " [function]_[params]_returns[expected]()," ngendi [function]jeneng fungsi sing lagi nyoba, [params]minangka conto parameter tartamtu sing lagi nyoba, lan [expected]nilai samesthine bali saka fungsi. Fungsi test meh tansah duwe jinis bali saka ' void' amarga titik utama saka kabèh fungsi kanggo mbukakassertEquals, sing bakal metu menyang konsol manawa tes sampeyan lulus utawa ora; sampeyan ora perlu data liyane kanggo bali ing ngendi wae. Baris 7: Kita ngumumake finalvariabel '' saka jinis bali saka Math.add (int), lan jeneng iku 'kaduga' dening konvensi. Nilai kasebut minangka jawaban sing dikarepake (4). Baris 8: Kita ngumumake finalvariabel '' saka jinis bali saka Math.add (int), lan jenenge 'nyata' miturut konvensi. Nilai kasebut minangka asil saka Math.add(2, 2). Baris 9: Garis emas. Iki minangka garis sing mbandhingake nyata lan samesthine lan ngandhani yen kita lulus tes mung yen padha. Parameter pisanan liwati "2 + 2 punika 4" punika gambaran saka fungsi test.

Apa yen fungsiku kudu mbuwang pengecualian?

Yen conto tes tartamtu sampeyan kudu mbuwang pangecualian tinimbang negesake yen nilai nyata lan samesthine padha, banjur JUnit duwe cara kanggo njlentrehake iki ing header @Test. Coba deleng conto ing ngisor iki. Assuming kita duwe fungsi ing Math.javadisebut Math.divide, kita arep kanggo mesthekake yen input ora bisa dipérang 0. Nanging, nyoba nelpon Math.divide(a, 0)kanggo sembarang Nilai 'a' kudu uncalan pangecualian ( ArithmeticException.class). Kita nemtokake ing header kaya mangkene:

import org.junit.jupiter.Test; // gives us the @Test header
import static org.junit.jupiter.api.Assertions.assertEquals; // less typing :) 


public class MathTests {
	@Test (expectedExceptions = ArithmeticException.class)
	public void divide_byZero_throwsException() throws ArithmeticException{
	Math.divide(1, 0);
	}
}
Sampeyan bisa duwe luwih saka siji pangecualian kanggo expectedExceptions, priksa manawa nggunakake kurung lan koma kanggo dhaptar kelas pangecualian, kayata:

expectedException = {FirstException.class, SecondException.class, … }

Kepiye cara nindakake tes JUnit ing Jawa?

Carane nambah JUnit kanggo IntelliJ: https://stackoverflow.com/questions/19330832/setting-up-junit-with-intellij-idea Sampeyan bisa mbukak proyek kaya biasane bakal mbukak tes. Mlaku kabeh tes ing kelas test bakal mbukak ing urutan abjad. Ing JUnit 5, sampeyan bisa nambah prioritas kanggo tes kanthi nambahake tag @Order. Tuladha:

@TestMethodOrder(OrderAnnotation.class)
public class Tests {
…
@Test
@Order(2)
public void a_test() { … }

@Test
@Order (1)
public void b_test() { … }
…
}
Sanajan a_test()teka sadurunge b_test()miturut abjad lan ing kode, b_test()bakal mbukak sadurunge a_test()kene, amarga 1 teka sadurunge 2 ing Urutan. Dadi babagan kabeh kanggo dhasar JUnit. Saiki, ayo ngrampungake sawetara Pitakonan Wawancara JUnit sing umum, lan sinau luwih akeh babagan JUnit ing dalan!

Pitakonan Wawancara JUnit (Informasi Tambahan)

Ing kene aku wis ngumpulake pitakonan wawancara JUnit sing paling populer. Yen sampeyan duwe apa-apa kanggo nambah - aran gratis kanggo nindakake iki ing komentar ing ngisor iki. P: Cara apa sampeyan bisa nelpon ing metode tes supaya gagal tes kanthi otomatis? A: fail("error description here!"); P: Sampeyan lagi nyoba kelas Dog; kanggo nyoba obyek Dog, sampeyan kudu instantiate sadurunge sampeyan bisa mbukak tes ing. Supaya sampeyan nulis setUp () fungsi kanggo instantiate Dog. Sampeyan mung pengin mbukak fungsi iki sapisan sajrone kabeh tes. Apa sampeyan kudu sijine langsung ing ndhuwur setUp () teken fungsi supaya JUnit ngerti kanggo mbukak setUp () sadurunge mbukak tes? A: @BeforeClass (@BeforeAll ing JUnit 5) P:Apa sing kudu dadi tandha fungsi saka setUp () fungsi sing diterangake ing ndhuwur? A: kekosongan statis umum. Sembarang fungsi karo @BeforeClass (@BeforeAll ing JUnit 5) utawa @AfterClass (@AfterAll ing JUnit 5) kudu statis. P: Sampeyan wis rampung nguji kelas Dog. Sampeyan nulis void tearDown () fungsi kang ngresiki munggah data lan prints informasi kanggo console sawise saben test. Sampeyan pengin fungsi iki mbukak sawise saben test. Apa sampeyan kudu sijine langsung ing ndhuwur tearDown () teken fungsi supaya JUnit ngerti kanggo mbukak tearDown () sawise mbukak saben test? A: @After (@AfterEach ing JUnit 5)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION