TF'de ana makine tarafında cihazsız test yazma

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. lib ile 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-resources seçeneği, alt işleme Robolectric'e özgü birkaç komut satırı seçeneğinin iletilmesini sağlar ve android-all ağ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-folder seç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-paths seç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., SecurityException istisnaları 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.