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