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. The example test config can be auto-generated. 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).
Yerel test yazma hakkında daha fazla bilgi için Yeni bir yerel test ekleme Örnek başlıklı makaleyi inceleyin.
JAR ana makine testleri
JUnit gibi JAR (Java) ana makine testleri, 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ında bir 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.
İzole edilmiş Java ana makine testleri
Cihazsız Java testleri, küçük bir performans maliyetiyle 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 çalıştırıcısı, yalnızca shim çalıştırıcısını ve test jar'ınızı sınıf yoluna yerleştirir.
- Bu koşucuyla 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ı
Soong, yukarıdaki gibi test yapılandırmasını manuel olarak oluşturmak yerine aşağıdaki ö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 uygulama 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ını önlemek 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ı için 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.