การยืนยัน JUnit

ระดับ, บทเรียน
มีอยู่

6.1 ยืนยัน

การยืนยันคือการตรวจสอบพิเศษที่สามารถแทรกในตำแหน่งต่างๆ ในโค้ดได้ หน้าที่ของพวกเขาคือพิจารณาว่ามีบางอย่างผิดพลาด หรือเพื่อตรวจสอบว่าทุกอย่างเป็นไปตามที่ควร นี่คือ "ตามต้องการ" และอนุญาตให้คุณตั้งค่าได้หลายวิธี

คุณได้พบการยืนยันบางอย่างในโค้ดด้านบนแล้ว สิ่งแรกคือการตรวจสอบวัตถุเพื่อความเท่าเทียมกัน หากวัตถุไม่เท่ากัน จะเกิดข้อยกเว้นและการทดสอบจะล้มเหลว

ลำดับของการเปรียบเทียบมีความสำคัญที่นี่เนื่องจาก JUnit ในรายงานขั้นสุดท้ายจะเขียนบางอย่างเช่น "มูลค่า 1 ได้รับ แต่คาดหวัง 3" รูปแบบทั่วไปสำหรับการตรวจสอบดังกล่าวคือ:

assertEquals(standard , meaning)

ตัวอย่าง:

@Test
public void whenAssertingEquality () {
    String expected = "3.1415";
    String actual = "3";

    assertEquals(expected, actual);
}

6.2 เมธอด assertEquals, assertTrue, assertFalse

ด้านล่างนี้ฉันจะแสดงวิธีการยอดนิยม - การยืนยัน จากชื่อของพวกเขามันค่อนข้างเป็นไปได้ที่จะเดาว่ามันทำงานอย่างไร แต่ฉันจะเขียนคำอธิบายสั้น ๆ ต่อไป:

ยืนยันเท่ากับ ตรวจสอบว่าวัตถุสองชิ้นมีค่าเท่ากัน
assertArrayEquals ตรวจสอบว่าสองอาร์เรย์มีค่าเท่ากันหรือไม่
ยืนยันไม่ใช่ Null ตรวจสอบว่าอาร์กิวเมนต์ไม่เป็นโมฆะหรือไม่
ยืนยันเป็นโมฆะ ตรวจสอบว่าอาร์กิวเมนต์เป็นโมฆะหรือไม่
ยืนยันว่าไม่เหมือนกัน ตรวจสอบว่าอาร์กิวเมนต์ทั้งสองไม่ใช่วัตถุเดียวกัน
ยืนยันเหมือนกัน ตรวจสอบว่าอาร์กิวเมนต์ทั้งสองเป็นวัตถุเดียวกัน
ยืนยันจริง ตรวจสอบว่าอาร์กิวเมนต์เป็นจริง หรือไม่
ยืนยันเท็จ ตรวจสอบว่าอาร์กิวเมนต์เป็นเท็จหรือไม่

วิธีการเหล่านี้บางส่วนดูเหมือนซ้ำซ้อน เหตุใดจึงต้องใช้assertSame(a, b)เมื่อคุณสามารถเขียนassertTrue(a == b)ได้

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

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

ตัวอย่างการเปรียบเทียบอาร์เรย์:

@Test
public void whenAssertingArraysEquality() {
    char[] expected = {'J','u','n','i','t'};
    char[] actual = "Junit".toCharArray();

    assertArrayEquals(expected, actual);
}

6.3 วิธียืนยันทั้งหมด

ดังที่ได้กล่าวไว้ข้างต้นassert method ไม่เพียงแต่ทำการตรวจสอบเท่านั้น แต่ยังเขียนข้อมูลจำนวนมากเกี่ยวกับวัตถุที่เทียบเคียงได้ลงในบันทึกอีกด้วย

มาทำการเปรียบเทียบ:

Address address = unitUnderTest.methodUnderTest();
assertEquals("Washington", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());

แต่ถ้าพารามิเตอร์ตัวใดตัวหนึ่งไม่ตรงกัน ส่วนที่เหลือจะไม่ถูกตรวจสอบ แต่ฉันต้องการให้พวกเขายังคงเกิดขึ้นและผลลัพธ์ของพวกเขาจะถูกบันทึกไว้ในบันทึก แต่ในเวลาเดียวกัน หากการตรวจสอบอย่างน้อยหนึ่งครั้งล้มเหลว แสดงว่าการทดสอบยังคงล้มเหลว

มีวิธีการพิเศษสำหรับสิ่งนี้ - assertAll () ในฐานะที่เป็นอาร์กิวเมนต์แรก จะต้องมีความคิดเห็นที่จะเขียนลงในบันทึก จากนั้นจึงใช้ฟังก์ชันยืนยันจำนวนเท่าใดก็ได้

นี่คือวิธีที่ตัวอย่างของเราจะถูกเขียนใหม่ด้วย:

Address address = unitUnderTest.methodUnderTest();
assertAll("Complex address comparison script",
    () -> assertEquals("Washington", address.getCity()),
    () -> assertEquals("Oracle Parkway", address.getStreet()),
    () -> assertEquals("500", address.getNumber())
);

จากนั้นหากที่อยู่ไม่ถูกต้อง สิ่งนี้จะถูกเขียนลงในบันทึก:

	Complex scenario comparison address (3 failures)
	expected: <Washington> but was: <Seattle>
    expected: <Oracle Parkway> but was: <Main Street>
    expected: <500> but was: <5772>

6.4 วิธี assertTimeout

จำคำ อธิบายประกอบ @Timeoutได้ไหม อนุญาตให้ควบคุมเวลาดำเนินการของวิธีการทั้งหมด แต่บางครั้งการตั้งข้อจำกัดในการทำงานของโค้ดบางส่วนภายในเมธอดก็มีประโยชน์ คุณสามารถใช้assertTimeout() สำหรับ สิ่ง นี้

เวลาจะถูกส่งผ่านเป็นพารามิเตอร์แรก และรหัส (ฟังก์ชัน) ที่ต้องดำเนินการภายในเวลาที่กำหนดจะถูกส่งผ่านเป็นวินาที ตัวอย่าง:

@Test
public void whenAssertingTimeout() {
    assertTimeout(
  	ofSeconds(2),
  	() -> {
    	// pause for one second
    	Thread.sleep(1000);
  	}
	);
}

คลาสAssertมี 12 ตัวแปรของassertTimeout() วิธี การ หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับพวกเขา ยินดีต้อนรับสู่เอกสาร อย่างเป็นทางการ

6.5 วิธีการยืนยันการโยน

บ่อยครั้งที่มีบางสถานการณ์ที่คุณจำเป็นต้องตรวจสอบให้แน่ใจว่าในบางสถานการณ์ โค้ดแสดงข้อยกเว้นที่ถูกต้อง: ตรวจพบข้อผิดพลาดและส่งข้อยกเว้นที่ถูกต้อง นี่เป็นสถานการณ์ที่พบบ่อยมาก

ในกรณีนี้ มี วิธี การยืนยัน ที่มีประโยชน์อีกวิธีหนึ่ง นั่นคือassertThrows( ) รูปแบบทั่วไปของการโทรคือ:

assertThrows(exception , code)

โดยพื้นฐานแล้ว จะคล้ายกับassertTimeout() method มาก แต่จะตรวจสอบว่าโค้ดที่ระบุส่งข้อยกเว้นที่ถูกต้องหรือไม่ ตัวอย่าง:

@Test
void whenAssertingException() {
    Throwable exception = assertThrows(
  	IllegalArgumentException.class,
  	() -> {
      	throw new IllegalArgumentException("Exception message");
  	}
    );
    assertEquals("Exception message", exception.getMessage());
}
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ