JavaRush /Kurslar /All lectures for UZ purposes /Birinchi JUnit bilan Testlar

Birinchi JUnit bilan Testlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

JUnit freymvorkini ulash

Java-kodni test qilish uchun bizda zo'r freymvork bor, u JUnit deb ataladi. U juda yaxshi ishlaydi, doimiy ravishda yangilanib turadi, juda mashhur va, albatta, Intellij IDEA bilan kuchli integratsiyaga ega.

Hozirda ushbu freymvorkning beshinchi versiyasidan foydalanishadi — JUnit 5, garchi ko'p loyihalarda siz hali ham uning to'rtinchi versiyasini uchratishingiz mumkin. Ular ko'p farq qilmaydi, lekin biz baribir eng oxirgisini ko'rib chiqamiz. Fikrimcha, sen testlarni faol ravishda yozishni boshlaganingda, mening tanlovimni ma'qullaysan.

Xo‘sh, loyihaga JUnitni qanday qo‘shish mumkin? Mavenni o'rganganingizdan so'ng bu sodda bo'ladi: shunchaki ushbu kodni pom.xml faylingizga qo'shing:

<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.8.1</version> <scope>test</scope> </dependency>

Aytgancha, agar Maven sizning testlaringizni yig‘ish bosqichida (test stage) ishga tushirishni xohlasangiz, pom.xmlga yana bir parcha qo'shishingiz kerak:

<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.3.2</version> </dependency> </dependencies> </plugin>

@Test annotatsiyasi

Faraz qilaylik, sen test qilmoqchi bo'lgan bir sinfing bor. Buni qanday eng yaxshi tarzda qilish mumkin? Keling, qandaydir misoldan boshlaymiz, abstrakt sinfni test qilish qiyin :)

Faraz qilaylik, bizda Calculator sinfi bor, u 4 asosiy operatsiyani bajarishni biladi: qo'shish, ayirish, ko'paytirish va bo'lish. Uni yozamiz:


    class Calculator {
    	public int add(int a, int b) {
        	return a+b;
    	}
 
    	public int sub(int a, int b) {
        	return a-b;
    	}
 
    	public int mul (int a, int b) {
        	return a*b;
    	}
 
    	public int div(int a, int b) {
        	return a/b;
    	}
}

Biz ushbu sinfning metodlarini test qilmoqchimiz. Kelajakda nimanidir o'zgartirishlari mumkin va hammasi ishlamay qolishi mumkin. Ushbu sinf uchun testlarni qanday yozishimiz mumkin?

Boshqa sinfni yaratish kerak. Buning uchun odatda xuddi shu nomni olib, Test suffiksini qo'shishadi. Har bir metod uchun kamida bitta test metodini qo'shish kerak. Namuna:


    class CalculatorTest {
   	@Test
    	public void add() {
    	}
   	@Test
    	public void sub() {
        }
   	@Test
    	public void mul() {
    	}
   	@Test
    	public void div() {
    	}
}

Ilgari, metod nomi test so'zi bilan boshlanishi kerak edi, ammo hozir bu shart emas.

JUnit testlari misollari

Keling, bizning CalculatorTest sinfimizning metodlarini test qilish uchun bir necha misollar yozamiz:


	class CalculatorTest {
   	@Test
    	public void add() {
        	Calculator calc = new Calculator();
        	int result = calc.add(2, 3);
        	assertEquals(5, result);
    	}
 
   	@Test
    	public void sub() {
        	Calculator calc = new Calculator();
        	int result = calc.sub(10, 10);
        	assertEquals(0, result);
        }
 
   	@Test
    	public void mul() {
        	Calculator calc = new Calculator();
        	int result = calc.mul(-5, -3);
        	assertEquals(15, result);
    	}
 
   	@Test
    	public void div() {
        	Calculator calc = new Calculator();
        	int result = calc.div(2, 3);
        	assertEquals(0, result);
    	}
}

JUnit yordamida yozilgan odatiy test shunday ko'rinadi. Qiziqarli narsalardan biri: bu yerda maxsus assertEquals() metodi ishlatilgan: bu metod unga berilgan parametrlarni solishtiradi, bu metodning nomidagi equals so'zi bunga ishora qiladi.

Agar assertEquals() metodiga berilgan parametrlar teng bo'lmasa, metod istisno chiqaradi va test muvaffaqiyatsiz deb hisoblanadi. Bu istisno boshqa testlarning bajarilishiga xalaqit bermaydi.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION