หน้านี้จะอธิบายวิธีเขียนการทดสอบอุปกรณ์รูปแบบ JUnit4 ที่ดำเนินการโดยโฮสต์ ซึ่งหมายความว่าฝั่งโฮสต์ของตัวเลียนแบบจะทริกเกอร์การดำเนินการ อุปกรณ์
โปรดทราบว่าเราถือว่าการทดสอบ "ฝั่งโฮสต์" และการทดสอบ "ที่ขับเคลื่อนโดยโฮสต์" มีความแตกต่างกันเล็กน้อย ดังนี้
- การทดสอบที่ขับเคลื่อนด้วยโฮสต์: เป็นการทดสอบที่ทำงานบนโฮสต์ที่โต้ตอบกับ อุปกรณ์เพิ่มเติม ระบบที่อยู่ในการทดสอบ (SUT) ไม่ได้อยู่ในโฮสต์ แต่ ได้รับการทดสอบจากโฮสต์
- การทดสอบฝั่งโฮสต์: เป็นการทดสอบที่ทำงานบนโฮสต์เท่านั้นและทดสอบบางอย่าง เฉพาะในโฮสต์ เช่น การทดสอบ 1 หน่วย
เหตุใดจึงควรสร้างการทดสอบที่ขับเคลื่อนด้วยโฮสต์แทนที่จะเป็นการทดสอบการใช้เครื่องมือ
การทดสอบบางอย่างอาจกำหนดให้คุณมีผลต่อสถานะโดยรวมของอุปกรณ์ เช่น การออก คำสั่งรีบูต ในเคสทดสอบการใช้เครื่องมือ การรีบูตจะทำให้ การวัดคุม การทดสอบไม่สามารถดำเนินการต่อได้ และไม่มีผลลัพธ์
การทดสอบที่ขับเคลื่อนโดยโฮสต์ยังอาจทําให้เกิดขั้นตอนการตั้งค่าเพิ่มเติมที่จําเป็นต้องมีการโต้ตอบกับอุปกรณ์ภายนอกที่การทดสอบนั้นใช้อยู่
การทดสอบที่ขับเคลื่อนด้วยโฮสต์สามารถจัดการกรณีการใช้งานเหล่านี้ และอนุญาตการทดสอบขั้นสูงสำหรับ อุปกรณ์โดยมีสถานการณ์ที่หลากหลายมากขึ้น หากคุณอยู่ในสถานการณ์ดังกล่าว การเขียนการทดสอบที่ขับเคลื่อนโดยโฮสต์จะเหมาะที่สุด
การเขียนการทดสอบที่ขับเคลื่อนโดยโฮสต์ใน TF เป็นอย่างไร
ตัวอย่าง
@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
@Before
public void setUp() throws Exception {
// Some setup
}
@Test
public void testCheckWeHaveDevice() throws Exception {
Assert.assertNotNull(getDevice());
}
}
การทดสอบที่ดำเนินการโดยโฮสต์ในสหพันธ์การค้าขับเคลื่อนโดย DeviceJUnit4ClassRunner ตัวดำเนินการทดสอบ JUnit4 โครงสร้างโดยรวมของคลาสการทดสอบจะเหมือนกับ การทดสอบ JUnit4 ปกติ:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
การขยาย BaseHostJunit4Test เป็นวิธีรับค่า API ยูทิลิตีการทดสอบที่มีประโยชน์ เช่น
installPackage
: อนุญาตให้ติดตั้ง APK ในอุปกรณ์เป้าหมายinstallPackageAsUser
: อนุญาตให้ติดตั้ง APK ในฐานะผู้ใช้ในเป้าหมาย อุปกรณ์uninstallPackage
: อนุญาตให้ถอนการติดตั้ง APKisPackageInstalled
: ตรวจสอบว่าติดตั้งแพ็กเกจแล้วหรือยังhasDeviceFeature
: ตรวจสอบว่าอุปกรณ์รองรับฟีเจอร์หรือไม่ (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: เรียกใช้เครื่องมือ ทดสอบกับอุปกรณ์เป้าหมายโดยใช้ DeviceTestRunOptions จัดการตัวเลือกที่เป็นไปได้ทั้งหมด
และให้สิทธิ์เข้าถึงออบเจ็กต์อุปกรณ์ที่เทรดด้วย
getDevice()
: แสดงผลออบเจ็กต์อุปกรณ์ TF สำหรับการจัดการอุปกรณ์getBuild()
: แสดงผลออบเจ็กต์ TF สำหรับข้อมูลบิลด์เพื่อรับข้อมูลเกี่ยวกับ งานสร้างgetAbi()
: แสดงผล ABI ที่การทดสอบทำงานอยู่
การสนับสนุนแลกเปลี่ยน: การเตรียมและทำความสะอาดอุปกรณ์สำหรับแต่ละชั้นเรียน
JUnit4 @BeforeClass
และ @AfterClass
ใช้ได้กับเมธอดแบบคงที่เท่านั้น
ซึ่งทำให้ใช้เครื่องจัดการ #getDevice()
ไม่ได้
การตั้งค่าหรือการล้างข้อมูลเฉพาะอุปกรณ์ แบบครั้งเดียวต่อชั้นเรียน หากต้องการแก้ไขปัญหานี้ ให้ใช้คำอธิบายประกอบ Tradefed
- @BeforeClassWithInfo: ทำงานก่อนคําอธิบายประกอบ @BeforeClass
- @AfterClassWithInfo: เรียกใช้หลังคำอธิบายประกอบ @AfterClass
@BeforeClassWithInfo
public static void beforeClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
@AfterClassWithInfo
public static void afterClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
TestInformation
ให้คุณใช้อุปกรณ์และจัดเก็บพร็อพเพอร์ตี้ที่สามารถ
ที่ใช้ในขอบเขตแบบคงที่หรือไม่ใช่แบบคงที่ BaseHostJUnit4Test
รองรับการเรียกใช้ TestInformation
ในขอบเขตแบบไม่คงที่ผ่าน #getTestInformation()
หากคุณไม่ได้ขยายเวลา BaseHostJUnit4Test
คุณสามารถใช้
ITestInformationReceiver
เพื่อรับออบเจ็กต์ TestInformation
วิธีกำหนดค่าการทดสอบที่ขับเคลื่อนโดยโฮสต์ใน Tradefed
ในไฟล์การกําหนดค่า XML ของ Tradefed การทดสอบที่ขับเคลื่อนโดยโฮสต์จะทํางานผ่านโปรแกรมรันไทม์ HostTest
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>