เมื่อคุณมีหน้าจอภายในแอพ Android ของคุณที่มีฟีเจอร์กล้องและ/หรือแกลเลอรีที่มีการเปลี่ยนแปลงหน้าจอบางอย่าง (มุมมอง ป้ายกำกับ หรือปุ่มที่ปรากฏ/หายไป ฯลฯ) และคุณจำเป็นต้องเขียนการทดสอบ Espresso สำหรับคุณสมบัติ/หน้าจอเหล่านั้น ของผู้ช่วยเหลือที่ฉันเคยใช้และฉันต้องการแบ่งปันกับคุณทั้งหมด การอนุญาต เมื่อคุณใช้กล้องภายในแอพของคุณ คุณต้องให้การอนุญาตบางอย่างในอุปกรณ์เพื่อที่จะอ่าน/จัดเก็บรูปภาพ สิทธิ์เหล่านี้ถูกถามในรันไทม์ซึ่งมักจะเกี่ยวข้องกับ READ_EXTERNAL_STORAGE และ WRITE_EXTERNAL_STORAGE
ดังนั้น GrantPermissionRule จึงอนุญาตการอนุญาตรันไทม์บน Android M (API 23) ขึ้นไป และเมื่อนำไปใช้กับคลาสทดสอบ กฎนี้จะพยายามให้สิทธิ์รันไทม์ที่ร้องขอทั้งหมด@get:Rulevar mRuntimePermissionRule = GrantPermissionRule.grant(android.
Manifest.permission.WRITE_EXTERNAL_STORAGE) กฎนี้มักจะใช้เพื่อให้สิทธิ์รันไทม์เพื่อหลีกเลี่ยงไม่ให้กล่องโต้ตอบการอนุญาตปรากฏขึ้นและบล็อก Apps Ui และตามเอกสารอย่างเป็นทางการ: ตามกฎนี้จะให้ READ_EXTERNAL_STORAGE โดยอัตโนมัติเมื่อมีการร้องขอ WRITE_EXTERNAL_STORAGE ทดสอบแกลเลอรีรหัส ทดสอบเมื่อคลิกไอคอนแกลเลอรีในแอป จากนั้นรูปภาพจะถูกเลือกและแสดงในหน้าจอ: อย่างแรกคือฉันมีวิธีตัวช่วย (CameraAndGallery.js)
savePickedImage) ที่บันทึกรูปภาพก่อน (สำหรับไอคอน ic_launcher แบบย่อ) ที่จะใช้ในการทดสอบเป็นไฟล์ในเครื่องที่มองเห็นได้สำหรับการทดสอบ: พารามิเตอร์กิจกรรมมาจาก ActivityTestRule:@get:Rulevar mActivityTestRule = IntentsTestRule(MyActivity: :class.java) จากนั้นฉันสร้างวัตถุ ActivityResult (เช่นจำลอง แต่สำหรับ Android Intent) ที่จะใช้โดยตัวจับคู่ Espresso Intents (เพื่อจับคู่และตรวจสอบความตั้งใจขาออก):val imgGalleryResult = CameraAndGallery.createImageGallerySetResultStub(mActivityTestRule
กิจกรรม) ตั้งใจ(hasAction(Intent.ACTION_CHOOSER)).respondWith(imgGalleryResult)ความลับที่นี่คือขอไฟล์ที่บันทึกไว้ก่อนหน้านี้และสุดท้ายใช้เป็นผลลัพธ์
หมายเหตุ: ในการทำงานกับ Intents ของเอสเพรสโซ เราต้องเพิ่มการพึ่งพานี้ให้กับแอพบิลด์ ไฟล์ gradle:androidTestImplementation androidx.test
espresso:espresso-intents:$espressoVersion สำหรับการทดสอบที่เรากำลังเขียนอยู่ สมมติว่ารูปภาพที่เลือกจากแกลเลอรี เรากำลังตั้งค่าใน ImageView ที่ผู้ใช้มองเห็นได้ จากนั้นส่วนสุดท้ายของการทดสอบคือการตรวจสอบว่า แสดงรูปภาพ (เมธอด hasImageSet()):onView(withId(R.id.auctionphotos_bigimage_viewer))
check(matches(hasImageSet()))Camera TestSimilar to Gallery Test การทดสอบเพื่อให้ได้ภาพจากอุปกรณ์ Camera ทำตามขั้นตอนที่เกือบจะเหมือนกัน แต่ในกรณีนี้ ไม่จำเป็นต้องบันทึกภาพมาก่อน เพียงจำลองผลลัพธ์ของ กล้อง:ผลการจับภาพเยาะเย้ยดังนี้:ภาพที่ได้จะถูกถ่ายโดยเจตนา:ตั้งใจ(hasAction(MediaStore. ACTION_IMAGE_CAPTURE)). ตอบกลับด้วย(imgCaptureResult)และด้วยเหตุนี้ เราจึงสามารถตรวจสอบได้ว่ารูปภาพนั้นถูกถ่ายและแสดงหรือไม่:onView(withId(R.
id.auctionphotos_bigimage_viewer)).check(matches(hasImageSet()))สุดท้าย ถ้าคุณต้องการสำรวจเนื้อหาเพิ่มเติมเล็กน้อยเกี่ยวกับการทดสอบ Espresso และ Intents คุณอาจต้องการดู repo นี้จากทีม Android อย่างเป็นทางการ
เซินเจิ้น tigerwong เทคโนโลยีจำกัด
โทร:86 13717037584
อีเมล: ที่ info@sztigerwong.com
เพิ่ม: ชั้น 1 อาคาร A2 สวนอุตสาหกรรมดิจิทัลซิลิคอนวัลเลย์ พาวเวอร์ เลขที่ 22 ถนน Dafu ถนน Guanlan เขตหลงหัว
เซินเจิ้น มณฑลกวางตุ้ง ประเทศจีน