Menulis pengujian tanpa perangkat sisi host di TF

Halaman ini memberi tahu Anda cara menulis pengujian sisi host yang tidak memerlukan seperti pengujian yang dijalankan pada instance GCE Linux. (Untuk detail tentang untuk menulis pengujian berbasis host yang memerlukan perangkat, lihat Tulis Ujian Berbasis Host di Federasi Perdagangan.)

Jenis pengujian sisi host

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

Pengujian native (gtest)

Membuat Pengujian native (gtests) untuk menguji platform. Jika pengujian tidak memerlukan perangkat, jalankan pengujian pada host; pengujian akan berjalan jauh lebih cepat. Untuk mengonfigurasi pengujian tersebut agar dijalankan di host pengujian, gunakan runner TF HostGTest.

Ini 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) pada host. Contoh pengujian dapat dibuat secara otomatis. Kecuali jika pengujian Anda memerlukan pengaturan atau pembersihan khusus, Anda dapat mengandalkan pembuatan konfigurasi pengujian otomatis untuk membuat pengujian TF yang tepat konfigurasi standar.

Untuk mengonfigurasi gtest sisi host dan mengaktifkan pembuatan konfigurasi pengujian otomatis, atur host_supported hingga true inci Android.bp, seperti pada hello_world_test.

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

Pengujian host JAR

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

Contoh konfigurasi uji 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 untuk HelloWorldHostTest. Perhatikan bahwa konfigurasi pengujian di atas dapat dibuat secara otomatis. Kecuali pengujian Anda memerlukan penyiapan atau pembersihan khusus, andalkan pembuatan konfigurasi uji otomatis untuk membuat pengujian TradeFed yang tepat konfigurasi Anda.

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

Pengujian host Java terisolasi

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

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

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

Alih-alih membuat konfigurasi pengujian secara manual seperti di atas, Soong dapat membuat konfigurasi secara otomatis dengan 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

Uji robolectric menggunakan runner yang sama dengan pengujian host yang terisolasi, dengan beberapa lainnya.

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

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 autogenerasi Robolectric

Alih-alih membuat konfigurasi pengujian secara manual seperti di atas, Soong dapat membuat konfigurasi secara otomatis dengan 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 uji 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 atribut setelan modul pengujian `test_suites` menjadi `general-tests`:

test_suites: ["general-tests"],

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