หัวข้อทดสอบใน Android Studio และ ทดสอบจากบรรทัดคำสั่ง จะอธิบายวิธีตั้ง ค่าและเรียกใช้การกำหนดค่าการทดสอบพื้นฐาน อย่างไรก็ตาม เมื่อแอปและข้อกำหนดในการทดสอบมีความซับซ้อนมากขึ้น คุณอาจต้องปรับการกำหนดค่าการทดสอบเพิ่มเติม เช่น คุณอาจต้องมีการตั้งค่าการทดสอบขั้นสูงเมื่อต้องการทำสิ่งต่อไปนี้
- เรียกใช้การทดสอบการใช้เครื่องมือสำหรับตัวแปรบิลด์ที่เฉพาะเจาะจงเท่านั้น หรือลบล้างการตั้งค่าไฟล์ Manifest
- เปลี่ยนประเภทบิลด์ที่ใช้เรียกใช้การทดสอบ หรือกำหนดค่าตัวเลือก Gradle
- แยกการทดสอบการใช้เครื่องมือออกเป็นโมดูลการทดสอบของตัวเอง
- ทำการทดสอบขั้นสูงเพิ่มเติมซึ่งเป็นส่วนหนึ่งของการตั้งค่าการรวมอย่างต่อเนื่อง
หน้านี้อธิบายวิธีต่างๆ ในการกำหนดค่าการทดสอบเมื่อการตั้งค่าเริ่มต้นไม่ตรงกับความต้องการของคุณ
สร้างการทดสอบการใช้เครื่องมือสำหรับตัวแปรบิลด์
หากโปรเจ็กต์มีบิลด์ตัวแปรที่มี ชุดซอร์สที่ไม่ซ้ำกัน คุณอาจต้องการรวมการทดสอบการใช้เครื่องมือที่ สอดคล้องกับชุดซอร์สเหล่านั้น วิธีนี้จะช่วยจัดระเบียบโค้ดทดสอบและช่วยให้คุณเรียกใช้เฉพาะการทดสอบที่ใช้กับตัวแปรบิลด์ที่กำหนดเท่านั้น
หากต้องการลิงก์การทดสอบการวัดคุมกับตัวแปรบิลด์ ให้วางการทดสอบเหล่านั้นไว้ในชุดซอร์สของตัวเองที่อยู่ที่
src/androidTestVariantName
การทดสอบการใช้เครื่องมือในชุดซอร์ส src/androidTest/ จะแชร์โดยบิลด์ตัวแปรทั้งหมด เมื่อสร้าง APK ทดสอบสำหรับตัวแปร "MyFlavor" ของแอป Gradle จะรวมชุดซอร์ส src/androidTest/ และ src/androidTestMyFlavor/
หากต้องการเพิ่มชุดซอร์สการทดสอบสำหรับตัวแปรบิลด์ใน Android Studio ให้ทำตามขั้นตอนต่อไปนี้
- ในหน้าต่างโปรเจ็กต์ ให้คลิกเมนู แล้วเลือกมุมมองโปรเจ็กต์
- ในโฟลเดอร์โมดูลที่เหมาะสม ให้คลิกขวาที่โฟลเดอร์ src แล้วคลิกใหม่ > ไดเรกทอรี
- ป้อน "androidTestVariantName." เป็นชื่อไดเรกทอรี เช่น หากคุณมีตัวแปรบิลด์ชื่อ "MyFlavor" ให้ใช้ชื่อไดเรกทอรี
androidTestMyFlavor - คลิกตกลง
- คลิกขวาที่ไดเรกทอรีใหม่ แล้วเลือกใหม่ > ไดเรกทอรี
- ป้อน "java" เป็นชื่อไดเรกทอรี แล้วคลิกตกลง
ตอนนี้คุณสามารถเพิ่มการทดสอบลงในชุดซอร์สใหม่นี้ได้โดยทำตาม ขั้นตอนในการเพิ่มการทดสอบใหม่ เมื่อไปถึงกล่องโต้ตอบเลือกไดเรกทอรีปลายทาง ให้เลือกชุดซอร์สการทดสอบตัวแปรใหม่
ตารางต่อไปนี้แสดงตัวอย่างวิธีที่ไฟล์การทดสอบการวัดคุมอาจอยู่ในชุดซอร์สที่สอดคล้องกับชุดซอร์สโค้ดของแอป
ตารางที่ 1 ซอร์สโค้ดของแอปและไฟล์การทดสอบการวัดคุมที่เกี่ยวข้อง
| เส้นทางไปยังคลาสของแอป | เส้นทางไปยังคลาสการทดสอบการใช้เครื่องมือที่ตรงกัน |
|---|---|
src/main/kotlin+java/Example.kt
|
src/androidTest/java/AndroidExampleTest.kt
|
src/myFlavor/kotlin+java/Example.kt
|
src/androidTestMyFlavor/java/AndroidExampleTest.kt
|
การสร้าง Gradle จะผสานและลบล้างไฟล์จากชุดซอร์สการทดสอบต่างๆ เช่นเดียวกับที่ทำกับชุดซอร์สของแอป ในกรณีนี้ ไฟล์
AndroidExampleTest.kt ในชุดซอร์ส androidTestMyFlavor จะลบล้าง
เวอร์ชันในชุดซอร์ส androidTest เนื่องจากชุดซอร์สของเวอร์ชันผลิตภัณฑ์มีลำดับความสำคัญสูงกว่าชุดซอร์สหลัก
เมื่อคุณเลือก Flavor ต่างๆ ในตัวเลือกบิลด์ตัวแปร โฟลเดอร์ androidTest ที่เหมาะสมจะแสดงในมุมมองAndroid เพื่อแสดงโฟลเดอร์ที่ใช้
MyFlavor แล้ว โฟลเดอร์
androidTestMyFlavor จะแสดงในมุมมองAndroidระบบจะไม่แสดงโฟลเดอร์ androidTestMyFlavor เมื่อเลือกตัวแปรอื่น
OtherFlavor แล้ว โฟลเดอร์
androidTestMyFlavor จะไม่แสดงในมุมมองAndroidมุมมองจะแตกต่างออกไปเล็กน้อยหากคุณใช้มุมมองโปรเจ็กต์ แต่หลักการเดียวกันนี้จะยังคงใช้ได้
androidTestMyFlavor แล้ว โฟลเดอร์ จะใช้งานอยู่ในมุมมองโปรเจ็กต์MyFlavor
เมื่อเลือกตัวแปรอื่น โฟลเดอร์ androidTestMyFlavor จะยังคงแสดงอยู่ แต่จะไม่แสดงเป็นโฟลเดอร์ที่ใช้งานอยู่
OtherFlavor แล้ว โฟลเดอร์
androidTestMyFlavor จะไม่ใช้งานอยู่ในมุมมองโปรเจ็กต์ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีผสานชุดซอร์สได้ที่ ชุดซอร์ส
กำหนดค่าการตั้งค่า Manifest ของการใช้เครื่องมือ
การทดสอบการใช้เครื่องมือจะสร้างขึ้นใน APK แยกต่างหากที่มีไฟล์ AndroidManifest.xml ของตัวเอง เมื่อ Gradle สร้าง APK ทดสอบ ระบบจะ
สร้างไฟล์ AndroidManifest.xml โดยอัตโนมัติและกำหนดค่า
ด้วย
<instrumentation> โหนด
เหตุผลหนึ่งที่ Gradle กำหนดค่าโหนดนี้ให้คุณก็คือเพื่อให้แน่ใจว่า
targetPackage
พร็อพเพอร์ตี้ระบุชื่อแพ็กเกจที่ถูกต้องของแอปที่อยู่ระหว่างการทดสอบ
หากต้องการเปลี่ยนการตั้งค่าอื่นๆ สำหรับโหนดนี้ ให้สร้างไฟล์ Manifest อีกไฟล์ในชุดซอร์สการทดสอบ หรือกำหนดค่าไฟล์ build.gradle ระดับโมดูล ดังที่แสดงในตัวอย่างโค้ดต่อไปนี้ คุณดูรายการตัวเลือกทั้งหมดได้ใน
BaseFlavor
เอกสารอ้างอิง API
Kotlin
android { ... defaultConfig { ... testApplicationId = "com.example.test" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testHandleProfiling = true testFunctionalTest = true } }
ดึงดูด
android { ... defaultConfig { ... testApplicationId "com.example.test" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testHandleProfiling true testFunctionalTest true } }
เวอร์ชันผลิตภัณฑ์แต่ละรายการที่คุณกำหนดค่าสามารถลบล้างพร็อพเพอร์ตี้ในบล็อก defaultConfig {} ได้ ดูข้อมูลเพิ่มเติมได้ที่ กำหนดค่า Product
Flavor
พร็อพเพอร์ตี้ในข้อมูลโค้ดมีดังนี้
| การตั้งค่า | คำอธิบาย |
|---|---|
testApplicationId
|
ระบุรหัสแอปพลิเคชันสำหรับ APK ทดสอบ |
testInstrumentationRunner
|
ระบุชื่อคลาสที่สมบูรณ์ในตัวเองของตัวเรียกใช้การทดสอบการใช้เครื่องมือ |
testHandleProfiling
|
หากตั้งค่าเป็น true จะเปิดใช้คลาสการใช้เครื่องมือเพื่อเริ่มและหยุดการสร้างโปรไฟล์หากตั้งค่าเป็น false การสร้างโปรไฟล์จะเกิดขึ้นตลอดเวลาที่คลาสการใช้เครื่องมือทำงาน |
testFunctionalTest
|
หากตั้งค่าเป็น true จะระบุว่าระบบ Android
ควรเรียกใช้คลาสการใช้เครื่องมือเป็นการทดสอบฟังก์ชัน
การทดสอบค่าเริ่มต้นคือ false |
เปลี่ยนประเภทบิลด์ทดสอบ
โดยค่าเริ่มต้น การทดสอบการใช้เครื่องมือทั้งหมดจะทำงานกับประเภทบิลด์ debug
คุณสามารถเปลี่ยนประเภทบิลด์นี้เป็นประเภทอื่นได้โดยใช้พร็อพเพอร์ตี้ testBuildType ในไฟล์ build.gradle ระดับโมดูล ตัวอย่างเช่น หากต้องการเรียกใช้การทดสอบกับประเภทบิลด์ staging ให้แก้ไขไฟล์ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
Kotlin
android { ... testBuildType = "staging" }
ดึงดูด
android { ... testBuildType "staging" }
กำหนดค่าตัวเลือกการทดสอบ Gradle
ปลั๊กอิน Android Gradle ช่วยให้คุณ
ระบุตัวเลือกบางอย่างสำหรับการทดสอบทั้งหมดหรือบางส่วนได้ ในไฟล์ระดับโมดูล ให้ใช้บล็อกเพื่อระบุตัวเลือกที่จะเปลี่ยนวิธีที่ Gradle เรียกใช้การทดสอบทั้งหมดbuild.gradletestOptions
Kotlin
android { ... // Encapsulates options for running tests. testOptions { reportDir = "$rootDir/test-reports" resultsDir = "$rootDir/test-results" } }
ดึงดูด
android { ... // Encapsulates options for running tests. testOptions { reportDir "$rootDir/test-reports" resultsDir "$rootDir/test-results" } }
พร็อพเพอร์ตี้ reportDir จะเปลี่ยนไดเรกทอรีที่ Gradle บันทึกรายงานการทดสอบ โดยค่าเริ่มต้น Gradle จะบันทึกรายงานการทดสอบในไดเรกทอรี
path_to_your_project/module_name
/build/outputs/reports/ $rootDir จะตั้งค่าเส้นทางที่สัมพันธ์กับไดเรกทอรีรากของโปรเจ็กต์ปัจจุบัน
พร็อพเพอร์ตี้ resultsDir จะเปลี่ยนไดเรกทอรีที่ Gradle บันทึกผลการทดสอบ โดยค่าเริ่มต้น Gradle จะบันทึกผลการทดสอบในไดเรกทอรี
path_to_your_project/module_name
/build/outputs/test-results/ $rootDir จะตั้งค่าเส้นทางที่สัมพันธ์กับไดเรกทอรีรากของโปรเจ็กต์ปัจจุบัน
หากต้องการระบุตัวเลือกสำหรับการทดสอบ 1 หน่วยในเครื่องเท่านั้น ให้กำหนดค่า
unitTests
บล็อกภายใน testOptions
Kotlin
android { ... testOptions { ... // Encapsulates options for local unit tests. unitTests { returnDefaultValues = true all { jvmArgs = listOf("-XX:MaxPermSize=256m") if (it.name == "testDebugUnitTest") { systemProperty = mapOf("debug" to "true") } ... } } } }
ดึงดูด
android { ... testOptions { ... // Encapsulates options for local unit tests. unitTests { returnDefaultValues true all { jvmArgs '-XX:MaxPermSize=256m' if (it.name == 'testDebugUnitTest') { systemProperty 'debug', 'true' } ... } } } }
โดยค่าเริ่มต้น การทดสอบ 1 หน่วยในเครื่องจะแสดงข้อยกเว้นทุกครั้งที่โค้ด
ที่คุณทดสอบพยายามเข้าถึง Android Platform API เว้นแต่คุณจะ
จำลองทรัพยากร Dependency ของ Android
ด้วยตนเองหรือใช้เฟรมเวิร์กการทดสอบ เช่น
Mockito อย่างไรก็ตาม คุณสามารถเปิดใช้พร็อพเพอร์ตี้ returnDefaultValues เพื่อให้การทดสอบแสดงผลเป็น null หรือ 0 เมื่อเข้าถึง Platform API แทนที่จะแสดงข้อยกเว้น
บล็อก all จะห่อหุ้มตัวเลือกสำหรับการควบคุมวิธีที่ Gradle เรียกใช้การทดสอบ 1 หน่วยในเครื่อง โปรดอ่าน
เอกสารอ้างอิงของ Gradle เพื่อดูรายการตัวเลือกทั้งหมดที่คุณระบุได้
พร็อพเพอร์ตี้ jvmArgs จะตั้งค่าอาร์กิวเมนต์ JVM สำหรับ JVM ของการทดสอบ
นอกจากนี้ คุณยังตรวจสอบชื่อ Task เพื่อใช้ตัวเลือกกับการทดสอบที่คุณระบุเท่านั้นได้ด้วย ในข้อมูลโค้ดตัวอย่าง พร็อพเพอร์ตี้ debug จะตั้งค่าเป็น true แต่ใช้ได้กับ Task testDebugUnitTest เท่านั้น
ใช้โมดูลการทดสอบแยกต่างหากสำหรับการทดสอบการใช้เครื่องมือ
หากต้องการมีโมดูลเฉพาะสำหรับการทดสอบการใช้เครื่องมือเพื่อแยกโค้ดส่วนที่เหลือออกจากโค้ดทดสอบ ให้สร้างโมดูลการทดสอบแยกต่างหากและกำหนดค่าบิลด์ของโมดูลดังกล่าวให้คล้ายกับโมดูลไลบรารี
หากต้องการสร้างโมดูลการทดสอบ ให้ทำดังนี้
- สร้างโมดูลไลบรารี
- ในไฟล์
build.gradleระดับโมดูล ให้ใช้ปลั๊กอินcom.android.testแทนcom.android.library - คลิกซิงค์โปรเจ็กต์

หลังจากสร้างโมดูลการทดสอบแล้ว คุณสามารถรวมโค้ดทดสอบไว้ใน
ชุดซอร์สหลักหรือชุดซอร์สตัวแปร (เช่น src/main/kotlin+java หรือ
src/variant/kotlin+java) หากโมดูลแอป
กำหนด Product Flavor หลายรายการ คุณสามารถสร้าง Flavor เหล่านั้นใหม่ในโมดูลการทดสอบ
ได้ โมดูลการทดสอบจะพยายามทดสอบ Flavor ที่ตรงกันในโมดูลเป้าหมายโดยใช้การจัดการทรัพยากร Dependency ที่คำนึงถึงตัวแปร
โดยค่าเริ่มต้น โมดูลการทดสอบจะมีและทดสอบเฉพาะตัวแปรการแก้ไขข้อบกพร่อง อย่างไรก็ตาม คุณสามารถสร้างประเภทบิลด์ใหม่ให้ตรงกับโปรเจ็กต์แอปที่ทดสอบ หากต้องการให้โมดูลการทดสอบทดสอบประเภทบิลด์อื่นที่ไม่ใช่ประเภทการแก้ไขข้อบกพร่อง ให้ใช้ VariantFilter เพื่อปิดใช้ตัวแปรการแก้ไขข้อบกพร่องในโปรเจ็กต์ทดสอบ ดังที่แสดง
Kotlin
android { variantFilter { if (buildType.name == "debug") { ignore = true } } }
ดึงดูด
android { variantFilter { variant -> if (variant.buildType.name.equals('debug')) { variant.setIgnore(true); } } }
หากต้องการให้โมดูลการทดสอบกำหนดเป้าหมายเฉพาะ Flavor หรือประเภทบิลด์บางอย่างของแอป คุณสามารถใช้พร็อพเพอร์ตี้ matchingFallbacks เพื่อกำหนดเป้าหมายเฉพาะตัวแปรที่ต้องการทดสอบ นอกจากนี้ยังช่วยป้องกันไม่ให้โมดูลการทดสอบต้องกำหนดค่าตัวแปรเหล่านั้นด้วยตนเอง