Menulis pengujian tanpa perangkat sisi host di TF

Halaman ini memberi tahu Anda cara menulis pengujian sisi host yang tidak memerlukan perangkat, seperti pengujian yang berjalan di instance GCE Linux. (Untuk mengetahui detail tentang menulis pengujian yang didorong host yang memerlukan perangkat, lihat Menulis Pengujian yang Didorong Host di Trade Federation.)

Jenis pengujian sisi host

Anda dapat menjalankan beberapa jenis pengujian sisi host melalui Trade Federation (TF).

Pengujian native (gtest)

Buat Pengujian native (gtest) untuk menguji platform. Jika pengujian tidak memerlukan perangkat, jalankan di host; pengujian akan berjalan jauh lebih cepat dengan cara tersebut. Untuk mengonfigurasi pengujian tersebut agar berjalan di host pengujian, gunakan runner TF HostGTest.

Berikut adalah contoh konfigurasi pengujian 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>

Konfigurasi pengujian menjalankan pengujian gtest (hello_world_test) di host. Contoh konfigurasi pengujian dapat dibuat secara otomatis. Kecuali jika pengujian memerlukan penyiapan atau pembersihan khusus, Anda dapat mengandalkan pembuatan konfigurasi pengujian otomatis untuk membuat konfigurasi pengujian TF yang tepat.

Untuk mengonfigurasi gtest sisi host dan mengaktifkan pembuatan konfigurasi pengujian otomatis, tetapkan host_supported ke true di Android.bp, seperti dalam hello_world_test.

Untuk informasi selengkapnya tentang cara menulis pengujian native, lihat Menambahkan Contoh Pengujian Native Baru.

Pengujian host JAR

Pengujian host JAR (Java), seperti JUnit, adalah pengujian yang tidak perlu dijalankan di perangkat, dan yang memberikan cakupan kode project Java Anda. Pengujian tersebut dapat dikonfigurasi untuk dijalankan di host pengujian menggunakan runner HostTest.

Contoh konfigurasi pengujian TradeFed

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Konfigurasi pengujian menjalankan pengujian JUnit sisi host HelloWorldHostTest. Perhatikan bahwa konfigurasi pengujian di atas dapat dibuat secara otomatis. Kecuali jika pengujian Anda memerlukan penyiapan atau pembersihan khusus, andalkan pembuatan konfigurasi pengujian otomatis untuk membuat konfigurasi pengujian TradeFed yang tepat.

Untuk mengetahui detail selengkapnya tentang cara menulis pengujian host JAR, lihat halaman Pengujian Host JAR (Java).

Pengujian host Java yang terisolasi

Pengujian Java tanpa perangkat dapat dijalankan di lingkungan isolasi dengan sedikit biaya performa. Namun, ada beberapa pertimbangan utama yang harus dilakukan sebelum memilih untuk menggunakan lingkungan ini.

  • Ini adalah runner default yang digunakan untuk pengujian unit Robolectric dan JUnit
  • Tradefed hanya mendukung pengujian JUnit di lingkungan isolasi.
  • Hanya dependensi yang ditautkan secara statis yang didukung. Tidak ada dependensi yang dideklarasikan dengan lib yang disertakan di classpath.
  • Runner isolasi hanya menempatkan runner shim dan jar pengujian Anda di classpath.
  • Ada sejumlah overhead tetap per operasi pengujian yang dijalankan dengan runner ini.

Contoh konfigurasi pengujian Tradefed (terisolasi)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Contoh konfigurasi Soong untuk pembuatan otomatis

Daripada membuat konfigurasi pengujian secara manual seperti di atas, Soong dapat membuat konfigurasi secara otomatis menggunakan deklarasi seperti contoh ini.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Pengujian Robolectric

Pengujian Robolectric menggunakan runner yang sama dengan pengujian host terisolasi, dengan beberapa opsi khusus.

  • Opsi robolectric-resources memungkinkan beberapa opsi command line khusus Robolectric diteruskan ke subproses serta menambahkan build hierarki android-all ke classpath subproses. Meskipun dua lainnya adalah praktik terbaik, opsi ini wajib untuk menjalankan pengujian Robolectric dengan sukses.
  • Opsi java-folder memungkinkan perubahan runtime Java yang digunakan oleh subproses. Hal ini diperlukan karena Robolectric lebih memilih versi Java tertentu yang mungkin tidak sesuai dengan JVM pilihan sistem host.
  • Opsi exclude-paths memungkinkan runner subproses untuk menghindari pemuatan modul tertentu sama sekali, yang berguna saat JAR dilengkapi dengan class tambahan yang dapat menyebabkan error pemuatan. java. adalah pengecualian umum, untuk menghindari pengecualian SecurityException.

Contoh konfigurasi 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>

Contoh konfigurasi Soong untuk pembuatan otomatis Robolectric

Daripada membuat konfigurasi pengujian secara manual seperti di atas, Soong dapat membuat konfigurasi secara otomatis menggunakan deklarasi seperti contoh ini.

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",
}

Pengujian Python

Jika logika pengujian ditulis dalam Python, gunakan jenis build python_test_host untuk membuat file par yang dapat dijalankan oleh TF PythonBinaryHostTest.

Contoh konfigurasi pengujian 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>

Setelan rangkaian pengujian

Agar pengujian sisi host dapat diakses oleh TF untuk build tertentu, tetapkan setelan `test_suites` modul pengujian ke `general-tests`:

test_suites: ["general-tests"],

Dengan setelan ini, pengujian dikemas ke general-tests.zip di target test_suites.