Questa pagina descrive come scrivere un test del dispositivo in stile JUnit4 basato sull'host. Ciò significa che il lato host del cablaggio attiverà azioni contro il dispositivo.
Tieni presente che consideriamo i test "lato host" e "in base all'host" leggermente diversi:
- Test basato sull'host: è un test eseguito sull'host che interagisce con uno o più dispositivi. Il sistema sottoposto a test (SUT) non si trova sull'host stesso, ma è in fase di test dall'host.
- test lato host: è un test che viene eseguito puramente sull'host e che testa qualcosa solo sull'host, ad esempio i test delle unità.
Perché creare un test basato sull'host anziché un test di strumentazione?
Alcuni test potrebbero richiedere di modificare lo stato complessivo del dispositivo, ad esempio di emettere un comando di riavvio. Nello scenario di test di strumentazione, un riavvio interromperebbe la strumentazione, il test non potrebbe continuare e non sarebbero disponibili risultati.
I test basati sull'host possono anche richiedere ulteriori passaggi di configurazione che richiedono l'interazione con dispositivi esterni su cui si basa il test.
Un test condotto dall'host può gestire questi casi d'uso e consentire test avanzati del dispositivo con più scenari. In questo caso, è consigliabile scrivere un test basato sull'host.
Come vengono scritti i test basati sull'host in TF?
Ecco un esempio:
@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());
}
}
I test basati sull'host in Trade Federation sono basati sul programma di test JUnit4 DeviceJUnit4ClassRunner. La struttura generale della classe di test è la stessa di un normale test JUnit4:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
L'estensione di BaseHostJunit4Test è un modo per ereditare utili API di test come:
installPackage
: consente di installare un APK sul dispositivo di destinazione.installPackageAsUser
: consente di installare un APK come utente sul dispositivo di destinazione.uninstallPackage
: consente di disinstallare un APK.isPackageInstalled
: verifica se un pacchetto è installato o meno.hasDeviceFeature
: controlla se il dispositivo supporta o meno una funzionalità. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: esegui un test di strumentazione su un dispositivo di destinazione utilizzando DeviceTestRunOptions per gestire tutte le opzioni possibili.
Fornisci anche l'accesso all'oggetto del dispositivo scambiato:
getDevice()
: restituisce un oggetto dispositivo TF per manipolare il dispositivo.getBuild()
: restituisce un oggetto TF con informazioni sulla build per ottenere informazioni sulla build.getAbi()
: restituisce l'ABI su cui è in esecuzione il test.
Supporto di Tradefed: preparazione e pulizia dei dispositivi per classe
JUnit4 @BeforeClass
e @AfterClass
sono applicabili solo ai metodi statici,
il che rende impossibile utilizzare l'handler #getDevice()
per eseguire alcune operazioni di pulizia o configurazione una tantum specifiche per dispositivo e per classe. Per risolvere il problema, utilizza
l'annotazione Tradefed.
- @BeforeClassWithInfo: viene eseguito prima delle annotazioni @BeforeClass
- @AfterClassWithInfo: viene eseguito dopo le annotazioni @AfterClass
@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
ti consente di utilizzare le proprietà del dispositivo e dello store che possono essere utilizzate in ambito statico o non statico. BaseHostJUnit4Test
supporta
l'ottenimento di TestInformation
in un ambito non statico tramite #getTestInformation()
.
Se non estendi BaseHostJUnit4Test
, puoi implementare
ITestInformationReceiver
per ricevere l'oggetto TestInformation
.
Come configurare un test basato sull'host in Tradefed?
Nel file di configurazione XML di Tradefed, i test basati sull'host vengono eseguiti tramite il programma di esecuzione HostTest.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>