Integration testing

การทดสอบใน Java เบื้องต้น

Maria Milusheva

Senior Software Engineer

นิยามของ Integration Testing

  • Integration - กระบวนการรวมส่วนประกอบซอฟต์แวร์หรือระบบย่อยแต่ละส่วนเข้าด้วยกันเป็นระบบเดียวที่ทำงานได้อย่างสอดคล้อง
  • Integration test - การทดสอบที่ตรวจสอบการทำงานร่วมกันระหว่างหลายส่วนประกอบหรือโมดูลของแอปพลิเคชัน เพื่อให้มั่นใจว่าทำงานร่วมกันได้อย่างถูกต้อง มักครอบคลุมการทดสอบกับ dependencies ภายนอก

ภาพเฟอร์นิเจอร์ IKEA ก่อนประกอบ

การทดสอบใน Java เบื้องต้น

Dependencies

  • Software dependency - ความสัมพันธ์ระหว่างส่วนประกอบซอฟต์แวร์ที่ส่วนประกอบหนึ่งต้องพึ่งพาอีกส่วนเพื่อให้ทำงานได้ ถูกต้อง

แผนภูมิแสดงความสัมพันธ์ของ dependency ระหว่างคลาส

1 Chart made using Mermaid: https://mermaid.live
การทดสอบใน Java เบื้องต้น

Integration testing vs. Unit testing

Unit tests:

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

Integration tests:

  • ทดสอบหลายส่วนประกอบและการทำงานร่วมกัน
  • เมื่อล้มเหลว ต้องวิเคราะห์เชิงลึกเพื่อหาสาเหตุ
  • อาจใช้ทรัพยากรมากและใช้เวลาตั้งค่าและรันนานกว่า
  • ทดสอบการทำงานจริงกับ dependencies จริง
  • อาจตรวจสอบพฤติกรรมโดยรวมแทนผลลัพธ์ที่แม่นยำ
การทดสอบใน Java เบื้องต้น

ตัวอย่าง: การแลกเปลี่ยนเงินตราต่างประเทศ

สมมติว่ากำลังสร้างแอปแลกเปลี่ยนสกุลเงิน:

public class ExchangeApp {
    private EuropeanCentralBankServer bank; // Enables ExchangeApp to use the bank server

    public ExchangeApp(EuropeanCentralBankServer bank) {
        this.bank = bank; // Save the object passed through the constructor
    }


public double convertEuroTo(String currency, double amount) { double rate = this.bank.getRateEuroTo(currency); return amount * rate; // Use the return values of the bank method in calculations } }
การทดสอบใน Java เบื้องต้น

Integration testing สำหรับการแลกเปลี่ยนเงินตราต่างประเทศ

Integration testing ตรวจสอบทั้งเมธอด convertEuroTo และ EuropeanCentralBankServer:

@Test
void convert_convertsWithoutError() {
    EuropeanCentralBankServer bank = new EuropeanCentralBankServer();
    ExchangeApp exchangeApp = new ExchangeApp(bank); // Pass bank object to constructor

double amount = 1000.0; String currency = "USD"; // convertEuroTo calls getRateEuroTo from the bank object double result = exchangeApp.convertEuroTo(currency, amount); assertTrue(result > 0); // Can't predict exact value, can only sanity test }
การทดสอบใน Java เบื้องต้น

มาฝึกกันเถอะ!

การทดสอบใน Java เบื้องต้น

Preparing Video For Download...