โค้ดยิม/หลักสูตรจาวา/โมดูล 3/การทดสอบขั้นสูงด้วย Mockito

การทดสอบขั้นสูงด้วย Mockito

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

1.1 ห้องสมุด Mockito

วันนี้เราจะทำความคุ้นเคยกับการทดสอบขั้นสูง โดยเฉพาะอย่าง ยิ่งกับ ห้องสมุด Mockito อย่าแม้แต่จะคิดที่จะออกจากธุรกิจนี้

ประการ แรกไลบรารีนี้เป็นมาตรฐานใน การทดสอบ สปริง ซึ่งเป็นมาตรฐานในอุตสาหกรรมการพัฒนาแบ็กเอนด์ของ Java

ประการที่สองคุณจะต้องเขียนการทดสอบสำหรับ Spring code ของคุณ วิธีเดียวที่จะเข้าใจว่าแบ็กเอนด์ที่คุณเขียนทำงาน ได้ตามปกติคือการเรียกเมธอดของ API และการทำแบบทดสอบนั้นง่ายกว่าแบบไม่มีแบบทดสอบถึง 10 เท่า คุณจะเห็นด้วยตัวคุณเอง

คุณสามารถ เพิ่มไลบรารี Mockito ให้กับคุณpom.xmlโดยใช้รหัส:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

ซอร์สโค้ดทั้งหมดสำหรับโครงการ Mockito สามารถพบได้ในGitHub

1.2 วัตถุจำลอง

Mockito นี้คืออะไรและทำไมมันถึงดี?

ในกระบวนการพัฒนาและการพัฒนาการทดสอบ บ่อยครั้งที่จำเป็นต้องใส่ "ต้นขั้ว" บางอย่างลงในโค้ดแทนที่จะเป็นวัตถุจริง

ตัวอย่างเช่น รหัสที่ทำงานกับฐานข้อมูลได้รับการทดสอบและเปลี่ยนแปลงบางอย่างที่นั่น เป็นการดีที่ก่อนการทดสอบแต่ละครั้งสถานะของฐานข้อมูลนี้จะเหมือนกัน (มิฉะนั้นการทดสอบจะแตกต่างกัน) และฉันต้องการฐานให้เรียบง่ายขึ้น เพื่อย้อนกลับสถานะเหล่านี้อย่างรวดเร็ว

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

หรือรหัสของคุณกำลังร้องขอข้อมูลจากเว็บเซิร์ฟเวอร์อื่นที่ไม่มีอยู่ในเซิร์ฟเวอร์ทดสอบ หรือคุณเขียนรหัสสำหรับการชำระเงินออนไลน์ที่ต้องทดสอบ 50 ครั้ง จากนั้นอนุญาตให้ใช้ในช่องทางการเงินจริงเท่านั้น

ฉันคิดว่าคุณเข้าใจ ... วัตถุเสมือนหรือที่เรียกว่าวัตถุต้นขั้วเป็นสิ่งที่มีประโยชน์มาก

และนี่คือความยาก - Java มีการพิมพ์แบบคงที่ ซึ่งหมายความว่าในการReadDatabaseกำหนดการอ้างอิงวัตถุให้กับตัวแปรแทนที่จะ เป็นวัตถุประเภท VirtualDatabaseคุณต้องสืบทอดคลาสVirtualDatabaseจากRealDatabase

จากนั้นปรากฎว่าคลาสมีRealDatabaseเมธอดส่วนตัวและตัวแปรมากมายที่เก็บการอ้างอิงไปยังวัตถุจริงอื่น ๆ และคุณไม่สามารถเขียนต้นขั้วปกติด้วยวิธีนี้ ในทางทฤษฎีเป็นสิ่งที่ดี แต่ในทางปฏิบัติมันเป็นทางตัน

และนี่คือการช่วยเหลือ ( คุณสามารถอ่านDynamicProxyรายละเอียดเพิ่มเติม) ซึ่งปรากฏใน Java 5 อีกครั้ง ช่วยให้คุณสร้างวัตถุเสมือนที่คอมไพเลอร์ไม่มีข้อตำหนิ

วัตถุเสมือนดังกล่าวเรียกว่าจำลอง (จากคำว่าจำลอง - เลย์เอาต์) ห้องสมุด Mockito สามารถยกระดับผลงานด้วยแบบจำลองเหล่านี้ให้สูงขึ้นเป็นประวัติการณ์ ดังนั้นชื่อของห้องสมุด

1.3 @ExtendWith คำอธิบายประกอบ

ไลบรารี Mockito ทำงานได้ดีกับ JUnit ซึ่งถือได้ว่าเป็นส่วนเสริมของมัน

มีสองวิธีในการเปิดใช้งานไลบรารี Mockito ในการทดสอบหน่วยของคุณ วิธีแรกคือการเพิ่มคำอธิบายประกอบพิเศษ:

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

วิธีที่สองคือการเปิดใช้งานโดยเรียกใช้เมธอดopenMocks():

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

ส่วนใหญ่คุณจะเห็นตัวเลือกแรก แต่บางครั้งก็มีประโยชน์ที่จะรู้ว่ามีตัวเลือกที่สอง

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ