เชื่อมต่อเฟรมเวิร์ก JUnit

สำหรับการทดสอบโค้ด Java เรามีเฟรมเวิร์กที่ยอดเยี่ยมที่เรียกว่าJUnit มันใช้งานได้ดี มีการอัปเดตตลอดเวลา เป็นที่นิยมมาก และแน่นอนว่า Intellij IDEA ผสานรวมเข้ากับมันอย่างแน่นหนา

ตอนนี้ทุกคนกำลังใช้เวอร์ชันที่ห้าของเฟรมเวิร์กนี้ - JUnit 5แม้ว่าในหลาย ๆ โปรเจ็กต์ คุณยังสามารถค้นหาเวอร์ชันที่สี่ได้ พวกมันไม่แตกต่างกันมากนัก แต่เราจะพิจารณาอันล่าสุดต่อไป ฉันคิดว่าเมื่อถึงเวลาที่คุณเริ่มเขียนแบบทดสอบ คุณจะยอมรับตัวเลือกของฉัน

ดังนั้นจะเพิ่ม JUnit ในโครงการได้อย่างไร หลังจากเรียนรู้ Maven แล้ว มันจะง่ายมาก เพียงเพิ่มโค้ดนี้ใน pom.xml ของคุณ:

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

อย่างไรก็ตาม ถ้าคุณต้องการให้ Maven เรียกใช้การทดสอบของคุณที่ระยะการสร้าง ( ระยะการทดสอบ ) คุณต้องเพิ่มส่วนย่อยอีกหนึ่งส่วนใน pom.xml:

<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>

@ทดสอบคำอธิบายประกอบ

สมมติว่าคุณมีชั้นเรียนที่คุณต้องการทดสอบ วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? เริ่มจากตัวอย่างกันก่อน เพราะมันยากที่จะทดสอบคลาสนามธรรม :)

สมมติว่าเรามี คลาส เครื่องคิดเลขที่สามารถดำเนินการพื้นฐานได้ 4 อย่าง ได้แก่ การบวก การลบ การคูณ และการหาร มาเขียนกันเถอะ:

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;
    	}
}

เราต้องการทดสอบเมธอดของคลาสนี้ คุณไม่มีทางรู้หรอกว่าในอนาคตพวกเขาจะเปลี่ยนบางอย่างและทุกอย่างจะหยุดทำงาน เราจะเขียนการทดสอบได้อย่างไร

เราต้องสร้างคลาสอื่น ในการทำเช่น นี้พวกเขามักจะใช้ชื่อเดียวกันและเพิ่มส่วนต่อท้าย Test สำหรับแต่ละวิธี คุณต้องเพิ่มวิธีทดสอบอย่างน้อยหนึ่งวิธี ตัวอย่าง:

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

เคยมีข้อกำหนดว่าชื่อเมธอดจะขึ้นต้นด้วยคำว่าtestแต่ไม่จำเป็นอีกต่อไป

ตัวอย่างการทดสอบ JUnit

ลองเขียนตัวอย่างที่เราจะทดสอบวิธีการของ คลาส CalculatorTest :

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 ทั่วไป จากสิ่งที่น่าสนใจ: มีการใช้ วิธีพิเศษ assertEquals() ที่นี่ : โดยจะเปรียบเทียบพารามิเตอร์ที่ส่งผ่านไปยังมัน ตามที่ระบุโดยคำว่าเท่ากับในชื่อของมัน

หากพารามิเตอร์ที่ส่งไปยังassertEquals()ไม่เท่ากัน เมธอดจะโยนข้อยกเว้นและการทดสอบจะล้มเหลว ข้อยกเว้นนี้จะไม่ขัดขวางการทดสอบอื่นไม่ให้ทำงาน