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

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