หน้านี้จะบอกวิธีเขียนการทดสอบฝั่งโฮสต์ที่ไม่ต้องใช้ เช่น การทดสอบที่ทำงานบนอินสแตนซ์ Linux GCE (สำหรับรายละเอียดเกี่ยวกับ การเขียนการทดสอบที่ขับเคลื่อนด้วยโฮสต์ที่ต้องใช้อุปกรณ์ โปรดดูที่ เขียนการทดสอบที่ขับเคลื่อนด้วยโฮสต์ในสมาพันธ์การค้า)
ประเภทการทดสอบฝั่งโฮสต์
คุณสามารถทำการทดสอบฝั่งโฮสต์ได้หลายประเภทผ่านสหพันธ์การค้า (TF)
การทดสอบโฆษณาเนทีฟ (gtest)
สร้างการทดสอบแบบเนทีฟ (gtests) เพื่อทดสอบแพลตฟอร์ม หากการทดสอบไม่ต้องใช้อุปกรณ์ ให้เรียกใช้ใน host; วิธีนี้จะทำให้การทดสอบ เร็วขึ้นมาก วิธีกำหนดค่าการทดสอบดังกล่าวให้ทำงานใน โฮสต์ทดสอบ ให้ใช้ตัวเรียกใช้ TF HostGTest
นี่คือตัวอย่างการกำหนดค่าการทดสอบ TradeFed
<configuration description="Runs hello_world_test."> <option name="null-device" value="true" /> <test class="com.android.tradefed.testtype.HostGTest" > <option name="module-name" value="hello_world_test" /> </test> </configuration>
การกำหนดค่าการทดสอบจะเรียกใช้การทดสอบ gtest (hello_world_test) บนโฮสต์ ตัวอย่างการทดสอบ การกำหนดค่าจะสร้างขึ้นโดยอัตโนมัติได้ เว้นแต่การทดสอบจำเป็นต้องใช้การตั้งค่าหรือการทำความสะอาดแบบพิเศษ คุณสามารถใช้การสร้างการกำหนดค่าการทดสอบอัตโนมัติเพื่อสร้างการทดสอบ TF ที่เหมาะสม การกำหนดค่าเอง
หากต้องการกำหนดค่า gtest ฝั่งโฮสต์และเปิดใช้การสร้างการกำหนดค่าการทดสอบอัตโนมัติ ให้ตั้งค่า
host_supported
ถึง true
นิ้ว
Android.bp
เช่นใน hello_world_test
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียนการทดสอบเนทีฟ โปรดดูที่ การเพิ่มการทดสอบโฆษณาเนทีฟใหม่ ตัวอย่างเช่น
การทดสอบโฮสต์ JAR
การทดสอบโฮสต์ JAR (Java) เช่น JUnit เป็นการทดสอบที่ไม่ต้องเรียกใช้ในอุปกรณ์ และให้โค้ด การครอบคลุมของโปรเจ็กต์ Java การทดสอบดังกล่าวสามารถกำหนดค่าให้ทำงานในการทดสอบได้ โฮสต์โดยใช้ตัวรัน HostTest
ตัวอย่างการกำหนดค่าการทดสอบ TradeFed
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
การกำหนดค่าการทดสอบจะเรียกใช้การทดสอบ JUnit ฝั่งโฮสต์ของ HelloWorldHostTest โปรดทราบว่าการกำหนดค่าการทดสอบข้างต้น สร้างขึ้นโดยอัตโนมัติได้ เว้นแต่การทดสอบจะต้องมีการตั้งค่าหรือการทำความสะอาดแบบพิเศษ การสร้างการกำหนดค่าการทดสอบอัตโนมัติเพื่อสร้างการทดสอบ TradeFed ที่เหมาะสม การกำหนดค่า
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเขียนการทดสอบโฮสต์ JAR โปรดดูที่ การทดสอบโฮสต์ JAR (Java)
การทดสอบโฮสต์ Java ที่แยกไว้
การทดสอบ Java แบบไร้อุปกรณ์ดำเนินการได้ในสภาพแวดล้อมแบบแยกโดยมีค่าใช้จ่ายด้านประสิทธิภาพเล็กน้อย อย่างไรก็ตาม มีข้อควรพิจารณาที่สำคัญบางประการก่อนที่จะเลือกใช้โซลูชันนี้ ของคุณ
- นี่คือตัววิ่งเริ่มต้นที่ใช้สำหรับการทดสอบหน่วย Robolectric และ JUnit
- Tradefed รองรับเฉพาะการทดสอบ JUnit ในสภาพแวดล้อมการแยกเท่านั้น
- รองรับเฉพาะทรัพยากร Dependency ที่ลิงก์แบบคงที่เท่านั้น ไม่มีทรัพยากร Dependency ที่ประกาศ
ที่มี
lib
รวมอยู่ใน Classpath - ตัวดำเนินการแยกจะวางเฉพาะ shim Runner และ Jar ทดสอบบน classpath
- มีการใช้ค่าโสหุ้ยคงที่จำนวนหนึ่งต่อการทดสอบที่ดำเนินการกับตัววิ่งนี้
ตัวอย่างการกำหนดค่าการทดสอบ Tradefed (แยก)
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.IsolatedHostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
ตัวอย่างการกำหนดค่า Soong สำหรับการสร้างอัตโนมัติ
Soong สามารถสร้างการกำหนดค่าอัตโนมัติได้โดยใช้ แทนการสร้างการกำหนดค่าการทดสอบด้วยตัวเองเช่นข้างต้น การประกาศ เหมือนตัวอย่างนี้
java_test_host { name: "HelloWorldHostTest", test_options: { unit_test: true, }, test_suites: ["general-tests"], srcs: ["test/**/*.java"], static_libs: [ "junit", ], }
การตรวจโรโมเลคตริกซ์
การทดสอบโรโปเลกตริกใช้ตัววิ่งเดียวกันกับการทดสอบโฮสต์ที่แยกออกมา โดยมีแบบพิเศษ ตัวเลือก
- ตัวเลือก
robolectric-resources
จะเปิดใช้ตัวเลือกบรรทัดคำสั่งเฉพาะ Robolectric บางรายการ ไปยังกระบวนการย่อย รวมถึงเพิ่มบิลด์ต้นไม้ของandroid-all
ลงใน คลาสพาธของกระบวนการย่อย แม้ว่าอีก 2 รายการจะเป็นแนวทางปฏิบัติแนะนำ แต่ตัวเลือกนี้จำเป็นสำหรับ ใช้การทดสอบ Robolectric ใดๆ ที่มีความสำเร็จ - ตัวเลือก
java-folder
อนุญาตให้เปลี่ยนรันไทม์ของ Java ที่กระบวนการย่อยใช้อยู่ นี่คือ เนื่องจาก Robolectric ต้องการ Java เวอร์ชันบางเวอร์ชันที่อาจไม่สอดคล้องกับ JVM ที่ต้องการของระบบโฮสต์ - ตัวเลือก
exclude-paths
ช่วยให้ตัวดำเนินการย่อยของกระบวนการหลีกเลี่ยงการโหลดโมดูลบางรายการได้ ซึ่งมีประโยชน์เมื่อ JAR มาพร้อมคลาสที่ไม่เกี่ยวข้องซึ่งอาจทําให้เกิดข้อผิดพลาดในการโหลดjava.
เป็นการยกเว้นทั่วไป เพื่อหลีกเลี่ยงการทำให้เกิดข้อยกเว้นSecurityException
รายการ
ตัวอย่างการกำหนดค่า Robolectric
<configuration description="Executes a Sample Robolectric Test"> <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" /> <option name="exclude-paths" value="java" /> <option name="use-robolectric-resources" value="true" /> <test class="com.android.tradefed.testtype.IsolatedHostTest"> <option name="jar" value="RobolectricExampleTest.jar" /> </test> </configuration>
ตัวอย่างการกำหนดค่า Soong สำหรับการสร้างอัตโนมัติ Robolectric
แทนที่จะสร้างการกำหนดค่าการทดสอบด้วยตัวเอง เช่น ด้านบน Soong สามารถสร้างการกำหนดค่าโดยอัตโนมัติโดยใช้การประกาศดังตัวอย่างนี้
android_robolectric_test { name: "HelloWorldRoboTest", srcs: [ "src/**/*.java", ], // Include the testing libraries static_libs: [ "mockito-robolectric-prebuilt", "platform-test-annotations", "testng", "truth-prebuilt", ], instrumentation_for: "HelloWorldApp", }
การทดสอบ Python
ถ้าตรรกะการทดสอบเขียนด้วย Python ให้ใช้ประเภทบิลด์ python_test_host
เพื่อสร้างไฟล์พาร์ที่สามารถ
ที่ดำเนินการโดย TF PythonBinaryHostTest
ตัวอย่างการกำหนดค่าการทดสอบ TradeFed
<configuration description="Config to run atest unittests"> <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" > <option name="par-file-name" value="atest_unittests" /> <option name="test-timeout" value="2m" /> </test> </configuration>
การตั้งค่าชุดทดสอบ
สำหรับ TF สำหรับการทดสอบฝั่งโฮสต์ให้เข้าถึงได้ ให้ตั้งค่า
การตั้งค่าโมดูลทดสอบ `test_suites`
เป็น
`general-tests`
:
test_suites: ["general-tests"],
เมื่อใช้การตั้งค่านี้ การทดสอบจะรวมอยู่ใน general-tests.zip
เป้าหมาย test_suites