撰寫商業聯盟的主機驅動測試

本頁說明如何編寫主機驅動的 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());
    }
}

貿易聯盟的主機驅動測試是由 DeviceJUnit4ClassRunner 執行 JUnit4 測試執行器。測試類別的整體結構與 一般 JUnit4 測試:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • AssumeAssert

擴充 BaseHostJunit4Test 是繼承實用測試公用程式 API 的方法,例如:

  • installPackage:允許在目標裝置上安裝 APK。
  • installPackageAsUser:允許以目標使用者的身分安裝 APK 裝置。
  • uninstallPackage:允許解除安裝 APK。
  • isPackageInstalled:檢查套件是否已安裝。
  • hasDeviceFeature:檢查裝置是否支援特定功能。 (pm list features)
  • runDeviceTests(DeviceTestRunOptions options):執行檢測作業 使用 DeviceTestRunOptions 對目標裝置進行測試 來處理所有可能的選項

同時提供換購裝置物件的存取權:

  • getDevice():傳回用於操控裝置的 TF 裝置物件。
  • getBuild():傳回建構資訊 TF 物件,以取得 建構應用程式
  • getAbi():傳回執行測試的 ABI。

換購支援:每堂課的準備和清理功能

JUnit4 @BeforeClass@AfterClass 僅適用於靜態方法。 因此您無法使用 #getDevice() 處理常式進行某些工作 針對每門裝置進行一次性設定、一次性設定,或是清理。如要解決這個問題,請使用 進行交易註解

  • @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

如果不擴充 BaseHostJUnit4TestITestInformationReceiver,以便接收 TestInformation 物件。

如何在 Tradefed 中設定主機導向測試?

主機導向測試會在 Tradefed XML 設定檔中執行, HostTest 執行元件

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>