การทดสอบในการพัฒนาแอปมือถือ: คืออะไร ประเภทใดบ้าง และวิธีจัดระเบียบ

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-31 เวลาอ่าน: 9 นาที

การทดสอบแอปพลิเคชันมือถือเป็นกระบวนการตรวจสอบว่าแอปพลิเคชันทำงานได้อย่างถูกต้อง ไม่ล่ม และตรงตามข้อกำหนด ตามข้อมูลจาก Software Testing Help (2025) การทดสอบอัตโนมัติ ช่วยลดเวลาในการตรวจสอบการถดถอยลง 70–80% เมื่อเทียบกับการทดสอบด้วยตนเอง ในบทความนี้ เราจะกล่าวถึงระดับการทดสอบ เครื่องมือสำหรับ iOS และ Android, TDD และ BDD ตลอดจน CI/CD สำหรับการทดสอบ

ประเด็นสำคัญ

  • การทดสอบหน่วย ตรวจสอบฟังก์ชันและคลาสแต่ละรายการ การทดสอบการบูรณาการตรวจสอบการโต้ตอบของโมดูล E2E ครอบคลุมสถานการณ์ผู้ใช้ทั้งหมด
  • iOS: XCTest สำหรับการทดสอบหน่วย, XCUITest สำหรับการทดสอบ UI Android: JUnit + Mockito + Espresso
  • เฟรมเวิร์กข้ามแพลตฟอร์ม: Detox (React Native), Appium (สากล), XCUITest (iOS)
  • TDD (การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ) — ทดสอบก่อน แล้วจึงเขียนโค้ด; BDD — สถานการณ์ในภาษาที่เข้าใจง่าย
  • CI/CD: การทดสอบจะทำงานอัตโนมัติทุกครั้งที่ push — เป็นมาตรฐานบังคับสำหรับการพัฒนาเชิงพาณิชย์

ระดับการทดสอบ: Unit, Integration, E2E

การทดสอบหน่วย

การทดสอบหน่วย เป็นรากฐานของการทดสอบแอปมือถือ ตรวจสอบหน่วยโค้ดที่เล็กที่สุด — ฟังก์ชัน เมธอด หรือคลาสเดียวโดยแยกจากส่วนอื่นของระบบ ในการพัฒนามือถือ การทดสอบหน่วยเขียนด้วย JUnit (Android) และ XCTest (iOS) การทดสอบหน่วยที่ดีต้องรวดเร็ว อิสระ และทำซ้ำได้ — ไม่ควรพึ่งพาเครือข่าย ฐานข้อมูล หรือส่วนประกอบ UI สำหรับการแยกใช้ test doubles: mock, stub และ fake

Mockito (Java/Kotlin) และ MockK (Kotlin-first) เป็นไลบรารียอดนิยมสำหรับสร้าง mock object บน Android บน iOS ใช้ OCMock, Cuckoo หรือโปรโตคอลแบบแมนนวล กฎ: การทดสอบหน่วยควรครอบคลุมตรรกะทางธุรกิจและแบบจำลองข้อมูล การทดสอบ UI ไม่ควรซ้ำกับการทดสอบหน่วย — ตรวจสอบการโต้ตอบของผู้ใช้กับอินเทอร์เฟซ

การทดสอบการบูรณาการ

การทดสอบการบูรณาการ ตรวจสอบการโต้ตอบระหว่างส่วนประกอบ: ที่เก็บกับฐานข้อมูล, ViewModel กับบริการ API, การนำทางระหว่างหน้าจอ ต่างจากการทดสอบหน่วย การทดสอบการบูรณาการใช้การพึ่งพาจริงหรือใกล้เคียงจริง (เช่น ฐานข้อมูลในหน่วยความจำหรือเซิร์ฟเวอร์จำลอง) Robolectric เป็นเฟรมเวิร์กสำหรับเรียกใช้การทดสอบ Android บน JVM โดยไม่ต้องใช้โปรแกรมจำลอง ซึ่งช่วยเร่งการทดสอบการบูรณาการได้ 10 เท่า

การทดสอบภาพรวม (Golden Tests) เป็นการทดสอบการบูรณาการชนิดพิเศษที่เปรียบเทียบส่วนประกอบ UI ที่เรนเดอร์กับภาพอ้างอิง (snapshot) หากลักษณะเปลี่ยนไป การทดสอบจะล้มเหลว — นักพัฒนาจะเห็นสิ่งที่เปลี่ยนแปลง Facebook SnapshotTestCase (iOS) และ Shot (Android) เป็นเครื่องมือยอดนิยมสำหรับการทดสอบภาพรวม

การทดสอบ E2E และ UI

การทดสอบ E2E (ครบวงจร) ตรวจสอบสถานการณ์ผู้ใช้ทั้งหมดตั้งแต่ต้นจนจบ: การเปิดแอป การเข้าสู่ระบบ การดำเนินการ การตรวจสอบผลลัพธ์ การทดสอบ UI เป็นส่วนย่อยของ E2E ที่เน้นอินเทอร์เฟซ เครื่องมือ: Espresso (Android), XCUITest (iOS), Detox (React Native) การทดสอบ E2E ช้าที่สุด จึงเรียกใช้แยกกันบน CI — โดยปกติในการสร้างตอนกลางคืน

เครื่องมือ iOS: XCTest และ XCUITest

XCTest

XCTest เป็นเฟรมเวิร์กในตัวของ Apple สำหรับการทดสอบหน่วยแอปมือถือ XCTestRunner เรียกใช้การทดสอบบนโปรแกรมจำลองหรืออุปกรณ์จริง การทดสอบสืบทอดจาก XCTestCase มี setUp และ tearDown สำหรับการเตรียมและทำความสะอาด XCTest ประกอบด้วย XCTAssert สำหรับการยืนยัน (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) และ XCTWaiter สำหรับรอการดำเนินการแบบอะซิงโครนัส

ตัวอย่างการทดสอบ XCTest อย่างง่าย: สร้างโมเดล User ตรวจสอบความถูกต้องของการเริ่มต้น การจัดรูปแบบชื่อ และการคำนวณอายุ Code Coverage ใน Xcode แสดงว่าโค้ดบรรทัดใดถูกครอบคลุมโดยการทดสอบ — เป้าหมายสำหรับโครงการเชิงพาณิชย์: ครอบคลุมตรรกะทางธุรกิจอย่างน้อย 70–80% XCTest ถูกรวมเข้ากับ Xcode Server และระบบ CI ผ่าน xcodebuild test

XCUITest

XCUITest เป็นเฟรมเวิร์กของ Apple สำหรับการทดสอบ UI ทำงานผ่านตัวระบุการช่วยเหลือ: XCUIElementQuery ค้นหาปุ่ม ช่องป้อนข้อมูล ตารางตาม label, identifier หรือประเภท XCUITest บันทึกลำดับการดำเนินการ (บันทึก/เล่นซ้ำ) และสร้างโค้ดทดสอบ สำคัญ: องค์ประกอบ UI ทั้งหมดต้องมี accessibilityIdentifier เพื่อการทำงานทดสอบที่เสถียร

เครื่องมือ Android: JUnit, Espresso, Robolectric

JUnit และ Mockito

JUnit เป็นเฟรมเวิร์กพื้นฐานสำหรับการทดสอบหน่วยแอปมือถือบน Java/Kotlin บน Android ใช้ JUnit 4 (เวอร์ชันเสถียรล่าสุด 4.13.2) และ JUnit 5 สำหรับโครงการใหม่ Mockito เป็นไลบรารีสำหรับสร้าง mock object: when(mock.method()).thenReturn(value) — รูปแบบมาตรฐานสำหรับแยกคลาสที่ทดสอบจากการพึ่งพา

ตัวอย่างการทดสอบ JUnit สำหรับ Android:

java
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

@RunWith(MockitoJUnitRunner.class)
public class LoginViewModelTest {

    @Mock
    AuthRepository authRepository;

    @Test
    public void login_emptyEmail_returnsError() {
        LoginViewModel vm = new LoginViewModel(authRepository);
        String result = vm.login("", "password123");
        assertEquals("Email cannot be empty", result);
        verify(authRepository, never()).authenticate(any());
    }
}

Espresso และ UI Automator

Espresso เป็นเฟรมเวิร์กของ Google สำหรับการทดสอบ UI Android Espresso ซิงโครไนซ์กับเธรด UI โดยอัตโนมัติ: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())) Espresso เขียนง่ายและเสถียรเนื่องจากการรอสถานะว่างในตัว UI Automator เป็นเฟรมเวิร์กสำหรับการทดสอบข้ามแอปพลิเคชันที่สามารถโต้ตอบกับองค์ประกอบระบบ (กล่องโต้ตอบสิทธิ์, ม่านแจ้งเตือน)

เครื่องมือข้ามแพลตฟอร์ม: Detox, Appium

Detox สำหรับ React Native

Detox เป็นเฟรมเวิร์ก E2E กล่องเทาสำหรับทดสอบแอปมือถือ React Native จาก Wix Detox ทำงานบนทั้งสองแพลตฟอร์มจากฐานโค้ดทดสอบเดียว โดยใช้ Espresso (Android) และ XCUITest (iOS) ภายใน Detox จะรอโดยอัตโนมัติจนกว่าแอปจะว่าง (ไม่มีอนิเมชัน คำขอเครือข่าย ตัวจับเวลา) แล้วจึงดำเนินการถัดไป

Appium

Appium เป็นเฟรมเวิร์กข้ามแพลตฟอร์มสากลที่รองรับ Android, iOS, เว็บและแอปไฮบริด Appium ใช้โปรโตคอล WebDriver และรองรับภาษาการเขียนโปรแกรมใดๆ (Java, Python, JS, Ruby) Appium Server ทำหน้าที่เป็นเซิร์ฟเวอร์ HTTP ที่แปลคำสั่งเป็นคำสั่ง UI Automator / XCUITest ดั้งเดิม ข้อเสียหลักของ Appium คือความเร็ว: การทดสอบทำงานช้ากว่า Espresso หรือ XCUITest ดั้งเดิม

การเปรียบเทียบเครื่องมือทดสอบ iOS และ Android
เกณฑ์ iOS Android
การทดสอบหน่วย XCTest JUnit 4/5 + Mockito
การทดสอบ UI XCUITest Espresso, UI Automator
การทดสอบภาพรวม FBSnapshotTestCase Shot, Roborazzi
ระบบอัตโนมัติท่าทาง XCUIGesture UiAutomator touch
ความครอบคลุมโค้ด Xcode Code Coverage Jacoco
การบูรณาการ CI xcodebuild test Gradle connectedCheck

TDD และ BDD: ระเบียบวิธีการทดสอบ

TDD: การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ

TDD เป็นระเบียบวิธีการทดสอบแอปมือถือที่เขียนการทดสอบก่อนโค้ดการนำไปใช้งาน วงจร Red-Green-Refactor: (1) เขียนการทดสอบที่ล้มเหลว (Red), (2) เขียนโค้ดน้อยที่สุดเพื่อให้การทดสอบผ่าน (Green), (3) ปรับโครงสร้างโค้ดในขณะที่รักษาการทดสอบให้ผ่าน TDD ให้ความครอบคลุมการทดสอบ 100% สำหรับฟังก์ชันใหม่และสถาปัตยกรรมที่สะอาด เนื่องจากการทดสอบเป็นข้อกำหนดแรกของความต้องการ

BDD: การพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม

BDD เป็นส่วนขยายของ TDD ที่เขียนการทดสอบด้วยภาษาธรรมชาติในรูปแบบ Given-When-Then Given (บริบท) — When (การดำเนินการ) — Then (ผลลัพธ์ที่คาดหวัง) การทดสอบ BDD เข้าใจได้สำหรับสมาชิกทีมทุกคน: นักพัฒนา ผู้ทดสอบ นักวิเคราะห์ และลูกค้า Mock vs Stub vs Fake: Mock ตรวจสอบการโต้ตอบ (ว่าเมธอดถูกเรียกหรือไม่), Stub ส่งคืนข้อมูลคงที่, Fake คือการนำไปใช้งานแบบย่อ (เช่น DB ในหน่วยความจำ) ที่ IT Sectr เราใช้ TDD สำหรับตรรกะทางธุรกิจที่สำคัญและ BDD สำหรับสถานการณ์การยอมรับ

Test Doubles เป็นชื่อทั่วไปสำหรับวัตถุที่แทนที่การพึ่งพาจริงในการทดสอบ มีสี่ประเภท: Dummy (วัตถุสำหรับเติมพารามิเตอร์ ไม่ได้ใช้), Stub (ส่งคืนค่าที่กำหนด), Spy (บันทึกการเรียกเพื่อตรวจสอบ), Mock (กำหนดการเรียกที่คาดหวังล่วงหน้า) การเข้าใจความแตกต่างเป็นสิ่งสำคัญสำหรับการออกแบบการทดสอบที่ถูกต้อง

CI/CD และ Device Farm

ระบบอัตโนมัติการทดสอบใน CI/CD

CI/CD — การบูรณาการอย่างต่อเนื่องและการส่งมอบอย่างต่อเนื่อง: แนวปฏิบัติในการสร้างและทดสอบแอปมือถือโดยอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลงโค้ด ในการพัฒนามือถือ ท่อส่ง CI/CD ประกอบด้วย: linting, การทดสอบหน่วย, การทดสอบการบูรณาการ, การสร้าง APK/IPA และการทดสอบ UI GitHub Actions และ Bitrise เป็นแพลตฟอร์มยอดนิยมสำหรับ CI/CD มือถือ การทดสอบควรทำงานรวดเร็ว: การทดสอบหน่วยใน 1–2 นาที การบูรณาการใน 5–10 นาที การทดสอบ UI ใน 15–30 นาที

Device Farm

Device Farm คือฟาร์มอุปกรณ์จริงสำหรับการทดสอบ Firebase Test Lab (Android) และ Xcode Cloud (iOS) ให้การเข้าถึงคลาวด์ไปยังอุปกรณ์หลายร้อยรุ่น Device Farm เผยปัญหาที่ไม่เห็นบนโปรแกรมจำลอง: ขนาดหน้าจอต่างๆ ประสิทธิภาพบนอุปกรณ์เก่า ปัญหาความเข้ากันได้ ที่ IT Sectr เราใช้ Firebase Test Lab สำหรับ Android และ Xcode Cloud สำหรับ iOS เป็นประจำ

คำถามที่พบบ่อย

เปอร์เซ็นต์ความครอบคลุมการทดสอบเท่าใดที่ถือว่าปกติ?

สำหรับโครงการเชิงพาณิชย์ ครอบคลุมตรรกะทางธุรกิจอย่างน้อย 70–80% โค้ด UI ครอบคลุมยากกว่า — 50% ก็เพียงพอ สิ่งสำคัญไม่ใช่เปอร์เซ็นต์แต่คือคุณภาพของการทดสอบ: ทดสอบสถานการณ์สำคัญ กรณีขอบ และการจัดการข้อผิดพลาด

Mock แตกต่างจาก Stub อย่างไร?

Mock ตรวจสอบการโต้ตอบ — ว่าเมธอดเฉพาะถูกเรียกด้วยพารามิเตอร์เฉพาะหรือไม่ Stub ส่งคืนข้อมูลที่กำหนดไว้ล่วงหน้า Mock ตรวจสอบพฤติกรรม Stub ตรวจสอบสถานะ

ควรเขียนการทดสอบสำหรับ UI หรือไม่?

ใช่ แต่เฉพาะสำหรับ สถานการณ์สำคัญ: เข้าสู่ระบบ ลงทะเบียน การสั่งซื้อ การชำระเงิน การทดสอบ UI ช้าและเปราะบาง — อย่าเขียนการทดสอบทุกหน้าจอ มุ่งเน้นที่สถานการณ์ E2E ของผู้ใช้

Snapshot Test คืออะไร?

Snapshot Test (Golden Test) เปรียบเทียบส่วนประกอบ UI ที่เรนเดอร์กับภาพอ้างอิง หากลักษณะเปลี่ยนไป (แบบอักษร ระยะห่าง สี) การทดสอบจะล้มเหลว — นักพัฒนาจะตรวจสอบว่าการเปลี่ยนแปลงนั้นตั้งใจหรือไม่ เหมาะสำหรับไลบรารีส่วนประกอบ

จะเร่งการทดสอบ E2E ได้อย่างไร?

เรียกใช้การทดสอบ E2E แบบขนาน บนหลายอุปกรณ์ ใช้ Cloud Device Farm และแบ่งการทดสอบเป็นกลุ่มอิสระ เพิ่มประสิทธิภาพการทดสอบ: ลดการรอ ใช้ mock สำหรับคำขอเครือข่าย

สรุป

  • การทดสอบหน่วย — รากฐานของปิรามิดการทดสอบ: รวดเร็ว แยกส่วน ครอบคลุมตรรกะทางธุรกิจ
  • iOS: XCTest สำหรับหน่วย, XCUITest สำหรับ UI Android: JUnit + Mockito, Espresso สำหรับ UI, Robolectric สำหรับการทดสอบการบูรณาการที่รวดเร็ว
  • เฟรมเวิร์ก ข้ามแพลตฟอร์ม: Detox (React Native), Appium (สากล), XCUITest (iOS ดั้งเดิม)
  • TDD — ทดสอบก่อนโค้ด, BDD — สถานการณ์ในภาษาธุรกิจ (Given-When-Then)
  • CI/CD — การเรียกใช้การทดสอบอัตโนมัติทุกครั้งที่ push เป็นสิ่งจำเป็นสำหรับการพัฒนาที่ทันสมัย
  • Device Farm — การทดสอบบนอุปกรณ์จริงในคลาวด์เพื่อระบุปัญหาฮาร์ดแวร์
  • ปิรามิดการทดสอบ: หน่วยมาก น้อยลงสำหรับการบูรณาการ น้อยลงอีกสำหรับ E2E — สมดุลที่เหมาะสมระหว่างความเร็วและความครอบคลุม

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ