本頁說明如何編寫由主機驅動的 JUnit4 樣式裝置測試。這表示安全帶的主機端會針對裝置觸發動作。
請注意,「主機端」測試和「主機驅動」測試略有不同:
- 主機驅動測試:在主機上執行的測試,可與一或多部裝置互動。測試中的系統 (SUT) 並非位於主機上,而是從主機進行測試。
- 主機端測試:這類測試完全在主機上執行,且只測試主機上的項目,例如單元測試。
為什麼要建立主機驅動測試,而不是檢測設備測試?
部分測試可能需要您影響裝置的整體狀態,例如發出重新啟動指令。在檢測設備測試案例中,重新啟動會終止檢測設備,測試無法繼續進行,且不會提供任何結果。
主機驅動測試也可以驅動其他設定步驟,這些步驟需要與測試所依附的外部裝置互動。
主機驅動測試可處理這些用途,並允許在更多情境下對裝置進行進階測試。如果遇到這種情況,最適合編寫主機驅動測試。
如何在 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());
}
}
Trade Federation 中的主機驅動測試是由 DeviceJUnit4ClassRunner JUnit4 測試執行器驅動。測試類別的整體結構與一般 JUnit4 測試相同:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
、Assert
擴充 BaseHostJunit4Test 是繼承實用測試公用程式 API 的方法,例如:
installPackage
:允許在目標裝置上安裝 APK。installPackageAsUser
:允許在目標裝置上以使用者身分安裝 APK。uninstallPackage
:允許解除安裝 APK。isPackageInstalled
:檢查是否已安裝套件。hasDeviceFeature
:檢查裝置是否支援某項功能。 (pm list features
)runDeviceTests(DeviceTestRunOptions options)
:使用 DeviceTestRunOptions 對目標裝置執行檢測設備測試,處理所有可能的選項。
同時提供 Tradefed 裝置物件的存取權:
getDevice()
:傳回 TF 裝置物件,用於操控裝置。getBuild()
:傳回建構資訊 TF 物件,以取得建構相關資訊。getAbi()
:傳回測試執行的 ABI。
Tradefed 支援:每個類別的裝置準備和清理作業
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
支援透過 #getTestInformation()
在非靜態範圍中取得 TestInformation
。
如果沒有擴充 BaseHostJUnit4Test
,可以實作 ITestInformationReceiver
來接收 TestInformation
物件。
如何在 Tradefed 中設定主機驅動的測試?
在 Tradefed XML 設定檔中,主機驅動的測試會透過 HostTest 執行器執行。
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>