Bu enstrümantasyon testi kategorisi, normal Android uygulamalarını hedefleyen testlerden çok farklı değildir. Burada, test uygulamasının ve aynı sertifika ile imzalanması gerekir. bu en iyi uygulamadır.
Bu kılavuzun, Google Analytics 4'te Google Cloud'un kullanımı ile ilgili platform kaynak ağacı iş akışı. Değilse lütfen Şartlar'a bakın. Burada ele alınan örnek, hedef ile yeni bir araç testi yazmaktır. paketinin kendi test uygulama paketinde ayarlanır. kavramak için lütfen Platform testiyle ilgili giriş bölümünü okuyun.
Bu kılavuzda, örnek olması için aşağıdaki test kullanılmaktadır:
- çerçeveler/ana/paketler/Kabuk/testler
Genel bir fikir edinmek için önce koda göz atmanız önerilir. inceleyin.
Kaynak konuma karar verme
Enstrümantasyon testi bir uygulamayı hedefleyeceğinden, test kaynak kodunun platform kaynak ağacındaki bileşen kaynak dizininizin kök dizininin altındaki bir tests
dizine yerleştirilmesi önerilir.
Kaynak konumla ilgili daha fazla tartışmaya ulaşmak için kendi kendine enstrümantasyon testlerini kullanın.
Manifest dosyası
Normal bir uygulamada olduğu gibi, her araç test modülünün belirli bir
manifest dosyası olarak kaydedin. Dosyayı AndroidManifest.xml
olarak adlandırıp sonraki adımda sağlarsanız
test modülü için Android.mk
adresine gönderirseniz bu modül
BUILD_PACKAGE
temel oluşturma dosyası.
Devam etmeden önce Uygulama Manifesti'ne Genel Bakış bölümünü incelemeniz önemle tavsiye edilir.
Bu rapor, bir manifest dosyasının temel bileşenlerine ve bunların temel bileşenlerine işlevler sunar.
Örnek değer değişikliği için manifest dosyasının en son sürümüne erişilebilir Yer: https://android.googlesource.com/platform/frameworks/base/+/main/packages/Shell/tests/AndroidManifest.xml
Kolaylık sağlamak için bir anlık görüntü eklenmiştir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.shell.tests">
<application>
<uses-library android:name="android.test.runner" />
<activity
android:name="com.android.shell.ActionSendMultipleConsumerActivity"
android:label="ActionSendMultipleConsumer"
android:theme="@android:style/Theme.NoDisplay"
android:noHistory="true"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.shell"
android:label="Tests for Shell" />
</manifest>
Bazı açıklamalar manifest dosyasında seçilir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.shell.tests">
package
özelliği, uygulama paketi adıdır: Bu, benzersizdir
Android uygulama çerçevesinin bir uygulamayı tanımlamak için kullandığı
(veya bu bağlamda: test uygulamanız) ekleyebilirsiniz. Sistemdeki her bir kullanıcının
bu paket adına sahip yalnızca bir uygulama yükleyebilir.
Test edilen uygulama paketinden bağımsız bir test uygulaması paketi olduğundan farklı bir paket adı kullanılmalıdır. Yaygın bir uygulama, .test
son eki eklemektir.
Ayrıca, bu package
özelliği
ComponentName#getPackageName()
ve çeşitli pm
aboneleri ile etkileşimde bulunmak için kullandığınız aynı
komutlarını adb shell
aracılığıyla kontrol edin.
Paket adının genelde aynı stilde olmasına rağmen bir Java paketi adı olduğu için, aslında bu adla pek ilgisi yok. Başka uygulamanız (veya test) paketiniz herhangi bir paket içeren sınıflar içerebilir Ancak diğer yandan sadeliği tercih edebilir ve en iyi düzeyindeki Java paketi adı veya testin aynısı paket adı.
<uses-library android:name="android.test.runner" />
İlgili sınıflar ayrı bir çerçeve jar kitaplığı dosyasında paketlendiğinden ve test paketi uygulama çerçevesi tarafından çağrıldığında ek sınıf yolu girişleri gerektirdiğinden bu, tüm enstrümantasyon testleri için gereklidir.
android:targetPackage="com.android.shell"
Bu işlem, aracın hedef paketini com.android.shell
olarak ayarlar.
Araç am instrument
komutuyla çağrıldığında çerçeve
com.android.shell
işlemini yeniden başlatır ve araç kodunu
teste tabi tutulmasıdır. Bu aynı zamanda test kodunda,
çalışan tüm sınıf örneklerine erişebilir ve bu
ve durumu değiştirebilmek, deney sırasında kullanılan test kancalarına bağlıdır.
Basit yapılandırma dosyası
Her yeni test modülünün yönlendirme yapması için bir yapılandırma dosyası olmalıdır. modül meta verileri, derleme süresi bağımlılıkları ve paketleme ile derleme sistemi bakın. Çoğu durumda Shortg tabanlı Blueprint dosya seçeneği yeterli değildir. Ayrıntılar için Basit Test Yapılandırması başlıklı makaleyi inceleyin.
Karmaşık yapılandırma dosyası
Daha karmaşık testler için ayrıca bir test yapılandırması yazmanız gerekir dosyası olarak da kullanabilirsiniz.
Test yapılandırması, özel cihaz kurulumu seçenekleri ve varsayılan ayarlar belirtebilir bağımsız değişkenlerin tümünü kullanırsınız.
Örnek gerrit değişikliği için yapılandırma dosyasının en son sürümüne erişilebilir Yer: frameworks/base/packages/Shell/tests/AndroidTest.xml
Kolaylık sağlamak amacıyla buraya bir anlık görüntü eklenmiştir:
<configuration description="Runs Tests for Shell.">
<target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
<option name="test-file-name" value="ShellTests.apk" />
</target_preparer>
<option name="test-suite-tag" value="apct" />
<option name="test-tag" value="ShellTests" />
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="com.android.shell.tests" />
<option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
</test>
</configuration>
Test yapılandırma dosyasındaki bazı açıklamalar:
<target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
<option name="test-file-name" value="ShellTests.apk"/>
</target_preparer>
Bu, Trade Federation'a ShellTests.apk'yı belirtilen bir target_preparer kullanarak hedef cihaza yüklemesini söyler. Hedef hazırlayan pek çok kişi vardır. Ticaret Federasyonu'ndaki geliştiriciler tarafından kullanılabiliyor ve bunlar, test yürütülmeden önce cihazın doğru şekilde kurulduğundan emin olun.
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
<option name="package" value="com.android.shell.tests"/>
<option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>
Bu, testi yürütmek için kullanılacak Ticaret Federasyonu test sınıfını belirtir ve yürütülecek cihazdaki pakete geçer ve test çalıştırıcı, JUnit'i seçin.
Test Modülü Yapılandırmaları hakkında daha fazla bilgi için buraya bakın.
JUnit4 özellikleri
android-support-test
kitaplığının test çalıştırıcısı olarak kullanılması,
JUnit4 stil testi sınıfları ve örnek değer değişikliği,
olduğunu söylüyor.
Örnek değer değişikliği için en son kaynak koduna şu adresten erişilebilir: frameworks/base/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
Test kalıpları genellikle bileşen ekiplerine özgü olsa da genellikle yararlı olan bazı kullanım kalıpları vardır.
@SmallTest
@RunWith(AndroidJUnit4.class)
public final class FeatureFactoryImplTest {
JUnit4'teki önemli bir fark, testlerin yaygın bir temel test sınıfından devralmak; bunun yerine, testleri düz Java ile yazarsınız ve kısıtlamaları belirtmek için ek açıklama kullanır. İçinde bu örnekte, bu sınıfın Android 360'da Android JUnit4 testi.
@SmallTest
ek açıklaması, test sınıfının tamamı için bir test boyutu belirtti: tümü
bu test sınıfına eklenen test yöntemleri bu test boyutu ek açıklamasını devralır.
test öncesi sınıf kurulumu, test sonrası ortadan kaldırma ve test sonrası sınıfın ortadan kaldırılması:
JUnit4'teki setUp
ve tearDown
yöntemlerine benzer.
Test
ek açıklama, gerçek testi ek açıklamak için kullanılır.
@Before
public void setup() {
...
@Test
public void testGetProvider_shouldCacheProvider() {
...
@Before
ek açıklaması, test öncesi kurulumu gerçekleştirmek için JUnit4 tarafından kullanılan yöntemlerde kullanılır.
Bu örnekte kullanılmasa da test sonrası teardown için @After
de vardır.
Benzer şekilde, @BeforeClass
ve @AfterClass
ek açıklamaları şuralarda kullanılabilir:
test sınıfındaki tüm testleri yürütmeden önce kurulumu gerçekleştirmek için JUnit4 tarafından uygulanan yöntemler,
yıkabilirsiniz. Sınıf kapsamı kurulumu ve sökme yöntemlerinin
statik olmalıdır.
Test yöntemlerinde ise, JUnit'in önceki sürümünün aksine,
yöntem adını test
ile başlatmak için her birine ek açıklama eklemeniz gerekir
@Test
ile. Her zamanki gibi test yöntemleri herkese açık olmalı, döndürülen değer belirtmemeli, parametre almamalı ve istisna atabilir.
Context context = InstrumentationRegistry.getTargetContext();
JUnit4 testleri artık ortak bir temel sınıf gerektirmediğinden
getContext()
veya üzerinden Context
örneği almak için gereklidir
Temel sınıf yöntemleriyle getTargetContext()
; bunun yerine yeni test çalıştırıcısı
bunları InstrumentationRegistry
üzerinden yönetir
enstrümantasyon çerçevesi tarafından oluşturulan bağlamsal ve çevresel kurulum
saklanıyor. Bu sınıf üzerinden şunları da arayabilirsiniz:
getInstrumentation()
:Instrumentation
sınıfına örnekgetArguments()
:-e <key> <value>
aracılığıylaam instrument
'a iletilen komut satırı bağımsız değişkenleri
Yerel olarak derleyip test edin
En yaygın kullanım alanları için Atest'i kullanın.
Daha fazla özelleştirme gerektiren daha karmaşık durumlar için araçlarla ilgili talimatları uygulayın.