Bir araç testi başlatıldığında hedef paketi
enstrümantasyon kodu yerleştirilerek yeniden başlatılır ve yürütme işlemi başlatılır. Bir
istisnai durum, buradaki hedef paketin Android uygulaması olmamasıdır.
oluşturabilirsiniz, çünkü böylece android
paketi
yeniden başlatılmasını gerektiren
paradoksal bir durum.
enstrümanın kendisi de dahil olmak üzere sistem işlevlerini destekler.
Bu, araç testinin kendisini Android'e yerleştiremeyeceği anlamına gelir.
çerçeve, yani sistem sunucusu, yani yürütme için kullanılır. Android'i test etmek için
çerçevesini kullanıyorsanız, test kodu yalnızca herkese açık API yüzeylerini veya açık olan API yüzeylerini
Android Arayüz Tanımlama Dili'ni kullanarak
AIDL
mevcuttur. Bu test kategorisi için belirli bir paketi hedeflemek anlamlı değildir. Bu nedenle, bu tür
kendi test uygulama paketini hedeflemek üzere beyan edilecek enstrümanlar
AndroidManifest.xml
içeren kendi <manifest>
etiketinde tanımlanmıştır.
Gereksinimlere bağlı olarak, bu kategorideki test uygulama paketleri ayrıca:
- Test için gerekli etkinlikleri gruplayın.
- Kullanıcı kimliğini sistemle paylaşın.
- Platform anahtarıyla imzalanmış olmalıdır.
- Herkese açık SDK yerine çerçeve kaynağına göre derlenmiş olmalıdır.
Bu araç testleri kategorisi bazen kendi kendine enstrümantasyonu kullanabilir. Aşağıda, Google Ads'deki kendi kendine araç testlerine ilişkin platform kaynağı:
Burada ele alınan örnek, hedef ile yeni bir araç testi yazmaktır. paketinin kendi test uygulama paketinde ayarlanır. Bu kılavuzda şunlar kullanılmaktadır: test etmek istiyorum:
Genel bir fikir edinmek için önce koda göz atmanız önerilir. inceleyin.
Kaynak konumu belirleyin
Genellikle ekibinizin kontrol etmesi gereken yerlerle ilgili belirli bir kalıbı vardır ve testlerin ekleneceği yerlerdir. Çoğu ekip tek bir Git deposuna sahiptir veya bir alt dizini diğer ekiplerle paylaşabilirsiniz ancak bileşen kaynak kodu.
Bileşen kaynağınız için kök konumunun <component source
root>
konumunda olduğu varsayıldığında çoğu bileşenin altında src
ve tests
klasörleri, bazıları ise
Android.mk
gibi ek dosyalar (veya .mk
ek dosyalara ayrılmış),
manifest dosyası AndroidManifest.xml
ve test yapılandırma dosyası
"AndroidTest.xml".
Yepyeni bir test eklediğiniz için muhtemelen
tests
dizininizi src
bulun ve içerikle doldurun.
Bazı durumlarda, ekibinizin tests
altında başka dizin yapıları olabilir.
farklı test paketlerini ayrı APK'lar halinde paketleme ihtiyacından dolayı. Ve
Bu durumda, tests
altında yeni bir alt dizin oluşturmanız gerekir.
Yapı ne olursa olsun, sonunda tests
dizini veya
dizindekilere benzer dosyaları içeren yeni oluşturulan
Örnek değer değişikliğindeki instrumentation
dizini. Her bir
dosyası bu belgenin ilerleyen bölümlerinde açıklanmaktadır.
Manifest dosyası
Uygulama projesinde olduğu gibi, her araç test modülünde de
AndroidManifest.xml
adlı manifest dosyasını açın. Otomatik olarak eklemek için
BUILD_PACKAGE
temel oluşturma dosyasını kullanarak bu dosyayı
Test modülünüz için Android.mk
dosyası.
AndroidManifest.xml
dosyası hakkında bilginiz yoksa şuraya bakın:
Uygulama manifestine genel bakış
Aşağıda örnek bir AndroidManifest.xml
dosyası verilmiştir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system"
package="android.test.example.helloworld" >
<application>
<uses-library android:name="android.test.runner"/>
</application>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
android:targetPackage="android.test.example.helloworld"
android:label="Hello World Test"/>
</manifest>
Bazı açıklamalar manifest dosyasında seçilir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.test.example.helloworld" >
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.
Ayrıca, bu package
özelliği
ComponentName#getPackageName()
ve çeşitli pm
aboneleri ile etkileşimde bulunmak için kullandığınız aynı
komutlarında adb shell
kullanılır.
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ı.
android:sharedUserId="android.uid.system"
Bu komut, yükleme sırasında bu APK dosyasına
Kullanıcı kimliğini (ör. çalışma zamanı kimliği) temel platform olarak ayarlamalıdır. Not:
apk'nin temel platformla aynı sertifikayla imzalanmasına bağlıdır
(önceki bölümde LOCAL_CERTIFICATE
bölümüne bakın), ancak bu iki değer birbirinden farklıdır:
kavramlar:
- bazı izinler veya API'ler imza korumalıdır. imzalayan sertifika
- bazı izinler veya API'ler, arayanın
system
kullanıcı kimliğini gerektirir.system
ile paylaşması için çağrı paketi gerekir; temel platformun kendisinden ayrı bir paket
<uses-library android:name="android.test.runner" />
İlgili sınıflar şunlardır: ayrı bir çerçeve JAR kitaplık dosyasında paketlendiğinden test paketi uygulama çerçevesi tarafından çağrıldığında sınıf yolu girişleri.
android:targetPackage="android.test.example.helloworld"
Buradaki targetPackage
öğesinin
Bu dosyanın manifest
etiketinde package
özelliği belirtilmiş. Şurada belirtildiği gibi:
test temelleri gibi, bu araç testi kategorisi
genellikle çerçeve API'lerini test etmek amacıyla kullanılır. Dolayısıyla
kendine ait olmayan belirli bir hedeflenen uygulama paketine sahip olmalarını sağlar.
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 bkz. Basit Test Yapılandırması.
Karmaşık yapılandırma dosyası
Daha karmaşık olan bu tür durumlar için ayrıca bir test yapılandırması yazmanız gerekir dosyası olarak, Ticaret Federasyonu.
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. Örneği şurada görebilirsiniz: /platform_testing/tests/example/instrumentation/AndroidTest.xml olarak değiştirebilirsiniz.
Kolaylık sağlaması açısından buraya bir anlık görüntü eklenmiştir:
<configuration description="Runs sample instrumentation test.">
<target_preparer class="com.android.tradefed.targetprep.TestFilePushSetup"/>
<target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
<option name="test-file-name" value="HelloWorldTests.apk"/>
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"/>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"/>
<option name="test-suite-tag" value="apct"/>
<option name="test-tag" value="SampleInstrumentationTest"/>
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
<option name="package" value="android.test.example.helloworld"/>
<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="HelloWorldTests.apk"/>
</target_preparer>
Bu, Ticaret Federasyonu'na HelloWorldTests.apk'yi hedefe yüklemesini söyler belirtilen bir target_preparer kullanarak cihaza yerleştirin. 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="android.test.example.helloworld"/>
<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.
Daha fazla bilgi için bkz. Modül Yapılandırmalarını Test Et.
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. Örneği şurada görebilirsiniz:
/platform_testing/tests/example/instrumentation/src/android/test/example/helloworld/HelloWorldTest.java.
Test kalıpları genellikle bileşen ekiplerine özgüdür ancak test sırasında yaygın olarak kullanılan kullanım kalıplarından bahsedeceğiz.
@RunWith(JUnit4.class)
public class HelloWorldTest {
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 bir JUnit4 testi olarak çalıştırılması gerektiği talimatını veriyoruz.
@BeforeClass
public static void beforeClass() {
...
@AfterClass
public static void afterClass() {
...
@Before
public void before() {
...
@After
public void after() {
...
@Test
@SmallTest
public void testHelloWorld() {
...
@Before
ve @After
ek açıklamaları, JUnit4 tarafından uygulanan yöntemlerde
ve test sonrası desteğinin sonlandırılmasıyla ilgilidir. Benzer şekilde, @BeforeClass
ve
@AfterClass
ek açıklamaları, JUnit4 tarafından uygulanan yöntemlerde,
bir test sınıfında yürütme ve daha sonra parçalama. Lütfen
sınıf kapsamlı kurulum ve söküm yöntemleri statik olmalıdır. Test yöntemleri konusunda ise
JUnit'in önceki sürümünün aksine, artık yöntem adının başlatılmasına gerek yoktur.
test
yerine, her birine @Test
ile ek açıklama eklenmelidir. Her zamanki gibi
test yöntemleri herkese açık olmalı, değer döndürmemeli, parametre almamalı ve
istisnalar yapabilir.
Enstrümantasyon sınıfı erişimi
Temel hello dünya örneğinde açıklanmasa da çoğu zaman
Instrumentation
örneğine erişim gerektirecek Android testi: Bu, temel API'dir
uygulama bağlamına, etkinlik yaşam döngüsüne
ve diğer test API'lerini kullanabilirsiniz.
JUnit4 testleri artık ortak bir temel sınıf gerektirmediğinden
şunun üzerinden Instrumentation
örneğini almak için gereklidir:
InstrumentationTestCase#getInstrumentation()
yerine yeni test kullanıcısı
InstrumentationRegistry
üzerinden yönetir
enstrümantasyon çerçevesi tarafından oluşturulan bağlamsal ve çevresel kurulum
saklanıyor.
Instrumentation
sınıfı örneğine erişmek için statik yöntemi çağırmanız yeterlidir.
InstrumentationRegistry
sınıfta getInstrumentation()
:
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation()
Yerel olarak derleyip test edin
En yaygın kullanım alanlarında Kabul et.
Daha ağır özelleştirme gerektiren daha karmaşık durumlarda araç talimatlarına bakın.