Bu sayfada, ana makine tarafından yönlendirilen JUnit4 tarzı bir cihaz testinin nasıl yazılacağı açıklanmaktadır. Bu, kablo demeti ana makine tarafının cihaza yönelik işlemleri tetikleyeceği anlamına gelir.
"Ana makine tarafı" testleri ve "ana makine tabanlı" testleri biraz farklı kabul ederiz:
- ana makineye dayalı test: Bir veya daha fazla cihazla etkileşimde bulunan ana makinede çalıştırılan bir testtir. Test edilen sistem (SUT), ana makinede değil ancak ana makineden test edilmektedir.
- Barındıran taraflı test: Yalnızca barındıran üzerinde çalışan ve yalnızca barındıran üzerinde bir şeyi test eden bir testtir (ör. birim testleri).
Neden araç testi yerine ana makine odaklı bir test oluşturmalısınız?
Bazı testler, cihazın genel durumunu etkilemenizi (ör. yeniden başlatma komutu gönderme) gerektirebilir. Enstrümantasyon test durumunda, yeniden başlatma enstrümantasyonu sonlandırır, test devam edemez ve sonuç alınamaz.
Barındıran tarafından yürütülen testler, testin bağlı olduğu harici cihazlarla etkileşim gerektiren ek kurulum adımlarını da tetikleyebilir.
Barındıran tarafından yönlendirilen testler bu kullanım alanlarını ele alabilir ve cihazın daha fazla senaryoda ileri seviye test edilmesine olanak tanıyabilir. Bu durumda, barındırıcıya dayalı bir test yazmak en mantıklı seçenektir.
Ana makine odaklı testler TF'de nasıl yazılır?
Aşağıda örneği verilmiştir:
@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
@Before
public void setUp() throws Exception {
// Some setup
}
@Test
public void testCheckWeHaveDevice() throws Exception {
Assert.assertNotNull(getDevice());
}
}
Trade Federation'daki ana makine tarafından yürütülen testler, DeviceJUnit4ClassRunner JUnit4 test çalıştırıcı tarafından yürütülür. Test sınıfının genel yapısı, normal bir JUnit4 testiyle aynıdır:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
BaseHostJunit4Test işlevinin uzatılması, aşağıdakiler gibi kullanışlı test yardımcı programları API'sini devralmanın bir yoludur:
installPackage
: Hedef cihaza APK yüklemenize olanak tanır.installPackageAsUser
: Bir APK'nın hedef cihaza kullanıcı olarak yüklenmesine olanak tanır.uninstallPackage
: APK'yı kaldırmaya olanak tanır.isPackageInstalled
: Bir paketin yüklü olup olmadığını kontrol edin.hasDeviceFeature
: Cihazın bir özelliği destekleyip desteklemediğini kontrol edebilirsiniz. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: Olası tüm seçenekleri işlemek için DeviceTestRunOptions'ı kullanarak bir hedef cihaza karşı bir enstrümantasyon testi çalıştırın.
Tradefed cihaz nesnesine de erişim izni verin:
getDevice()
: Cihazı çalıştırmak için bir TF cihaz nesnesi döndürür.getBuild()
: Derleme hakkında bilgi almak için bir derleme bilgisi TF nesnesi döndürür.getAbi()
: Testin çalıştırıldığı ABI'yi döndürür.
Tradefed desteği: Sınıf başına cihaz hazırlama ve temizleme
JUnit4 @BeforeClass
ve @AfterClass
yalnızca statik yöntemler için geçerlidir. Bu nedenle, cihaza özgü, sınıf başına tek seferlik kurulum veya temizleme işlemleri yapmak için #getDevice()
işleyicisini kullanmak mümkün değildir. Bu sorunu çözmek için Tradefed ek açıklamalarını kullanın.
- @BeforeClassWithInfo: @BeforeClass ek açıklamalarından önce çalışır
- @AfterClassWithInfo: @AfterClass ek açıklamalarından sonra çalışır
@BeforeClassWithInfo
public static void beforeClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
@AfterClassWithInfo
public static void afterClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
TestInformation
, cihazı ve statik veya statik olmayan kapsamda kullanılabilen mülkleri kullanmanıza olanak tanır. BaseHostJUnit4Test
, TestInformation
öğesinin #getTestInformation()
aracılığıyla statik olmayan bir kapsamda alınmasını destekler.
BaseHostJUnit4Test
'ü genişletmiyorsanız TestInformation
nesnesini almak için ITestInformationReceiver
'ü uygulayabilirsiniz.
Tradefed'de ana makineye dayalı test nasıl yapılandırılır?
Tradefed XML yapılandırma dosyasında, ana makine tarafından yürütülen testler HostTest çalıştırıcısıyla çalıştırılır.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>