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 hierarkiandroid-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 pengecualianSecurityException
.
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
.