Bu sayfada, bir cihaz gerektirmeyen ana makine tarafı testi (ör. Linux GCE örneğinde çalışan bir test) nasıl yazacağınız açıklanmaktadır. (Cihaz gerektiren ana makine odaklı test yazma hakkında ayrıntılı bilgi için Trade Federation'da Ana Makine Odaklı Test Yazma başlıklı makaleyi inceleyin.)
Ana makine tarafı test türleri
Trade Federation (TF) aracılığıyla çeşitli ana makine tarafı testleri çalıştırabilirsiniz.
Yerel (gtest) testleri
Bir platformu test etmek için yerel testler (gtests) oluşturun. Test için cihaz gerekmiyorsa testi bir ana makinede çalıştırın. Bu şekilde test çok daha hızlı çalışır. Bu tür testleri bir test ana makinesinde çalışacak şekilde yapılandırmak için TF çalıştırıcısı HostGTest'i kullanın.
Bu, örnek bir TradeFed test yapılandırmasıdır:
<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>
Test yapılandırması, bir ana makinede gtest testi (hello_world_test) çalıştırır. Örnek test yapılandırması otomatik olarak oluşturulabilir. Testiniz özel bir kurulum veya temizlik gerektirmiyorsa uygun TF testi yapılandırmaları oluşturmak için otomatik test yapılandırması oluşturma özelliğini kullanabilirsiniz.
Ana makine tarafında bir gtest yapılandırmak ve otomatik test yapılandırması oluşturmayı etkinleştirmek için Android.bp içinde host_supported değerini true olarak ayarlayın (ör. hello_world_test).
Doğal test yazma hakkında daha fazla bilgi için Yeni bir doğal test ekleme Örnek başlıklı makaleyi inceleyin.
JAR ana makine testleri
JUnit gibi JAR (Java) ana makine testleri, bir cihazda çalıştırılması gerekmeyen ve Java projenizin kod kapsamını sağlayan testlerdir. Bu tür testler, HostTest çalıştırıcısı kullanılarak bir test ana makinesinde çalışacak şekilde yapılandırılabilir.
Örnek TradeFed test yapılandırması
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
Test yapılandırması, HelloWorldHostTest'in ana makine tarafı JUnit testini çalıştırır. Yukarıdaki test yapılandırmasının otomatik olarak oluşturulabileceğini unutmayın. Testinizin özel kurulum veya temizlik gerektirmediği sürece, uygun TradeFed test yapılandırması oluşturmak için otomatik test yapılandırması oluşturma özelliğini kullanın.
JAR barındırma testi yazma hakkında daha fazla bilgi için JAR (Java) Barındırma Testleri sayfasına bakın.
Yalıtılmış Java ana makine testleri
Cihazsız Java testleri, biraz performans kaybıyla yalıtım ortamında çalıştırılabilir. Ancak bu ortamı kullanmayı seçmeden önce dikkate alınması gereken bazı önemli noktalar vardır.
- Bu, Robolectric ve JUnit birim testleri için kullanılan varsayılan çalıştırıcıdır.
- Tradefed, yalıtım ortamında yalnızca JUnit testlerini destekler.
- Yalnızca statik olarak bağlı bağımlılıklar desteklenir.
libile bildirilen bağımlılıklar sınıf yoluna dahil edilmez. - Yalıtım koşucusu, yalnızca shim koşucusunu ve test jar'ınızı sınıf yoluna yerleştirir.
- Bu çalıştırıcıyla yürütülen her test çalıştırması için sabit bir genel gider vardır.
Örnek Tradefed test yapılandırması (izole)
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.IsolatedHostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
Otomatik oluşturma için örnek Soong yapılandırması
Test yapılandırmasını yukarıdaki gibi manuel olarak oluşturmak yerine Soong, bu örnekteki gibi bir bildirim kullanarak yapılandırmayı otomatik olarak oluşturabilir.
java_test_host {
name: "HelloWorldHostTest",
test_options: {
unit_test: true,
},
test_suites: ["general-tests"],
srcs: ["test/**/*.java"],
static_libs: [
"junit",
],
}Robolectric testleri
Robolectric testleri, birkaç özel seçenekle birlikte izole edilmiş ana makine testleriyle aynı çalıştırıcıyı kullanır.
robolectric-resourcesseçeneği, alt işleme Robolectric'e özgü birkaç komut satırı seçeneğinin iletilmesini sağlar veandroid-allağacının derlemesini alt işlem sınıf yoluna ekler. Diğer iki seçenek en iyi uygulamalar olsa da bu seçenek, Robolectric testlerini başarılı bir şekilde çalıştırmak için zorunludur.java-folderseçeneği, alt işlem tarafından kullanılan Java çalışma zamanının değiştirilmesine olanak tanır. Robolectric, ana sistemin tercih ettiği JVM ile uyumlu olmayabilecek belirli Java sürümlerini tercih ettiğinden bu gereklidir.exclude-pathsseçeneği, alt işlem çalıştırıcısının belirli modülleri hiç yüklememesine olanak tanır. Bu, bir JAR dosyasında yükleme hatalarına neden olabilecek gereksiz sınıflar olduğunda kullanışlıdır.java.,SecurityExceptionistisnaları oluşturmamak için yaygın bir hariç tutma işlemidir.
Örnek Robolectric yapılandırması
<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>
Robolectric otomatik oluşturma için örnek Soong yapılandırması
Soong, yukarıdaki gibi test yapılandırmasını manuel olarak oluşturmak yerine bu örnekteki gibi bir bildirim kullanarak yapılandırmayı otomatik olarak oluşturabilir.
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",
}Python testi
Test mantığı Python'da yazılmışsa TF PythonBinaryHostTest tarafından çalıştırılabilen bir par dosyası oluşturmak için python_test_host derleme türünü kullanın.
Örnek TradeFed test yapılandırması
<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>
Test paketi ayarı
Belirli bir derleme için ana makine tarafı testinin TF tarafından erişilebilir olması amacıyla test modülü `test_suites` ayarını `general-tests` olarak ayarlayın:
test_suites: ["general-tests"],
Bu ayarla test, test_suites hedefinde general-tests.zip olarak paketlenir.