इस पेज पर, होस्ट-साइड टेस्ट लिखने का तरीका बताया गया है. इस टेस्ट के लिए, डिवाइस की ज़रूरत नहीं होती. जैसे, Linux GCE इंस्टेंस पर चलने वाला टेस्ट. (होस्ट-ड्रिवन टेस्ट लिखने के बारे में जानकारी पाने के लिए, ट्रेड फ़ेडरेशन में होस्ट-ड्रिवन टेस्ट लिखना लेख पढ़ें.)
होस्ट-साइड टेस्ट के टाइप
Trade Federation (TF) की मदद से, होस्ट-साइड के कई तरह के टेस्ट चलाए जा सकते हैं.
नेटिव (gtest) टेस्ट
किसी प्लैटफ़ॉर्म की जांच करने के लिए, नेटिव टेस्ट (gtests) बनाएं. अगर टेस्ट के लिए किसी डिवाइस की ज़रूरत नहीं है, तो उसे होस्ट पर चलाएं. इससे टेस्ट ज़्यादा तेज़ी से चलेगा. ऐसे टेस्ट को किसी टेस्ट होस्ट पर चलाने के लिए कॉन्फ़िगर करने के लिए, TF रनर HostGTest का इस्तेमाल करें.
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>
टेस्ट कॉन्फ़िगरेशन, होस्ट पर gtest टेस्ट (hello_world_test) चलाता है. उदाहरण के तौर पर, टेस्ट कॉन्फ़िगरेशन अपने-आप जनरेट हो सकता है. अगर आपके टेस्ट को किसी खास सेटअप या क्लीनअप की ज़रूरत नहीं है, तो सही TF टेस्ट कॉन्फ़िगरेशन बनाने के लिए, अपने-आप टेस्ट कॉन्फ़िगरेशन जनरेट करने की सुविधा का इस्तेमाल किया जा सकता है.
होस्ट-साइड gtest को कॉन्फ़िगर करने और अपने-आप टेस्ट कॉन्फ़िगरेशन जनरेट करने की सुविधा चालू करने के लिए, hello_world_test की तरह ही, Android.bp
में host_supported
को true
पर सेट करें.
नेटिव टेस्ट लिखने के बारे में ज़्यादा जानने के लिए, नया नेटिव टेस्ट उदाहरण जोड़ना लेख पढ़ें.
JAR होस्ट टेस्ट
JAR (Java) होस्ट टेस्ट, जैसे कि JUnit, ऐसे टेस्ट होते हैं जिन्हें किसी डिवाइस पर चलाने की ज़रूरत नहीं होती. साथ ही, ये आपके Java प्रोजेक्ट की कोड कवरेज देते हैं. HostTest रनर का इस्तेमाल करके, ऐसे टेस्ट को टेस्ट होस्ट पर चलाने के लिए कॉन्फ़िगर किया जा सकता है.
TradeFed के टेस्ट कॉन्फ़िगरेशन का सैंपल
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
टेस्ट कॉन्फ़िगरेशन, HelloWorldHostTest का होस्ट-साइड JUnit टेस्ट चलाता है. ध्यान दें कि ऊपर दिया गया टेस्ट कॉन्फ़िगरेशन, अपने-आप जनरेट हो सकता है. अगर आपके टेस्ट को किसी खास सेटअप या क्लीनअप की ज़रूरत नहीं है, तो सही TradeFed टेस्ट कॉन्फ़िगरेशन बनाने के लिए, अपने-आप जनरेट होने वाले टेस्ट कॉन्फ़िगरेशन का इस्तेमाल करें.
JAR होस्ट टेस्ट लिखने के तरीके के बारे में ज़्यादा जानने के लिए, JAR (Java) होस्ट टेस्ट पेज देखें.
अलग-अलग Java होस्ट के टेस्ट
डिवाइस के बिना Java टेस्ट, आइसोलेटेड एनवायरमेंट में चलाए जा सकते हैं. हालांकि, इससे परफ़ॉर्मेंस पर थोड़ा असर पड़ सकता है. हालांकि, इस एनवायरमेंट का इस्तेमाल करने से पहले कुछ बातों का ध्यान रखना ज़रूरी है.
- यह Robolectric और JUnit यूनिट टेस्ट के लिए इस्तेमाल किया जाने वाला डिफ़ॉल्ट रनर है
- Tradefed, आइसोलेटेड एनवायरमेंट में सिर्फ़ JUnit टेस्ट के साथ काम करता है.
- सिर्फ़ स्टैटिक तौर पर लिंक की गई डिपेंडेंसी काम करती हैं.
lib
के साथ बताई गई कोई भी डिपेंडेंसी, क्लासपथ में शामिल नहीं की जाती. - आइसोलेशन रनर, क्लासपाथ पर सिर्फ़ शिम रनर और आपके टेस्ट जॉब को डालता है.
- इस रनर की मदद से हर टेस्ट रन के लिए, कुछ तय ओवरहेड होता है.
Tradefed टेस्ट कॉन्फ़िगरेशन का सैंपल (अलग-अलग)
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.IsolatedHostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
अपने-आप जनरेट होने वाले Soong कॉन्फ़िगरेशन का सैंपल
ऊपर दिए गए तरीके से, मैन्युअल तरीके से टेस्ट कॉन्फ़िगरेशन बनाने के बजाय, Soong इस उदाहरण जैसे एलान का इस्तेमाल करके, कॉन्फ़िगरेशन को अपने-आप जनरेट कर सकता है.
java_test_host { name: "HelloWorldHostTest", test_options: { unit_test: true, }, test_suites: ["general-tests"], srcs: ["test/**/*.java"], static_libs: [ "junit", ], }
Robolectric टेस्ट
Robolectric टेस्ट, अलग-अलग होस्ट टेस्ट के रनर का इस्तेमाल करते हैं. हालांकि, इनमें कुछ खास विकल्प भी होते हैं.
robolectric-resources
विकल्प की मदद से, Robolectric के लिए खास तौर पर उपलब्ध कुछ कमांड लाइन विकल्पों को सब-प्रोसेस में पास किया जा सकता है. साथ ही,android-all
के ट्री बिल्ड को सब-प्रोसेस के क्लासपथ में जोड़ा जा सकता है. Robolectric टेस्ट को सही तरीके से चलाने के लिए, ये दो विकल्प सबसे सही हैं. हालांकि, इस विकल्प का इस्तेमाल करना ज़रूरी है.java-folder
विकल्प की मदद से, सबप्रोसेस के लिए इस्तेमाल किए जाने वाले Java रनटाइम को बदला जा सकता है. ऐसा करना इसलिए ज़रूरी है, क्योंकि Robolectric कुछ खास Java वर्शन को प्राथमिकता देता है. हो सकता है कि ये वर्शन, होस्ट सिस्टम के पसंदीदा JVM के साथ काम न करें.exclude-paths
विकल्प की मदद से, सबप्रोसेस रनर को कुछ खास मॉड्यूल को लोड करने से रोका जा सकता है. यह विकल्प तब काम आता है, जब JAR में ऐसी अतिरिक्त क्लास शामिल हों जिनकी वजह से लोड करने में गड़बड़ियां हो सकती हैं.java.
,SecurityException
अपवादों को रोकने के लिए, आम तौर पर शामिल नहीं किया जाता.
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>
Robolectric के अपने-आप जनरेट होने वाले कॉन्फ़िगरेशन के लिए, Soong कॉन्फ़िगरेशन का सैंपल
ऊपर दिए गए तरीके से, मैन्युअल तरीके से टेस्ट कॉन्फ़िगरेशन बनाने के बजाय, Soong इस उदाहरण की तरह एलान का इस्तेमाल करके, कॉन्फ़िगरेशन को अपने-आप जनरेट कर सकता है.
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 टेस्ट
अगर टेस्ट लॉजिक को Python में लिखा गया है, तो ऐसी par फ़ाइल बनाने के लिए बिल्ड टाइप python_test_host
का इस्तेमाल करें जिसे TF PythonBinaryHostTest
से चलाया जा सके.
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>
टेस्ट सुइट की सेटिंग
किसी खास बिल्ड के लिए, होस्ट-साइड टेस्ट को TF से ऐक्सेस किया जा सके, इसके लिए टेस्ट मॉड्यूल `test_suites`
की सेटिंग को `general-tests`
पर सेट करें:
test_suites: ["general-tests"],
इस सेटिंग की मदद से, test_suites
टारगेट पर general-tests.zip
के लिए टेस्ट को पैकेज किया जाता है.