Esta página descreve como escrever um teste de dispositivo estilo JUnit4 conduzido pelo host. Isso significa que o lado host do chicote irá desencadear ações contra o dispositivo.
Observe que consideramos os testes "do lado do host" e os testes "orientados pelo host" um pouco diferentes:
- teste controlado por host: é um teste executado no host que interage com um ou mais dispositivos. O sistema em teste (SUT) não está no host em si, mas está sendo testado no host.
- teste do lado do host: é um teste executado puramente no host e testando algo apenas no host, por exemplo, testes de unidade.
Por que criar um teste orientado a host em vez de um teste de instrumentação?
Alguns testes podem exigir que você afete o estado geral do dispositivo, como a emissão de um comando de reinicialização. No caso de teste de instrumentação, uma reinicialização interromperia a instrumentação, o teste não poderia continuar e nenhum resultado estaria disponível.
Os testes controlados por host também podem conduzir etapas de configuração adicionais que exigem interação com dispositivos externos dos quais o teste depende.
Um teste controlado por host pode lidar com esses casos de uso e permitir testes avançados do dispositivo com mais cenários. Se você estiver nessa situação, escrever um teste orientado ao host faz mais sentido.
Como os testes orientados a host são escritos em TF?
Aqui está um exemplo:
@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());
}
}
Os testes controlados por host na Trade Federation são conduzidos pelo executor de testes DeviceJUnit4ClassRunner JUnit4. A estrutura geral da classe de teste é a mesma de um teste JUnit4 normal:
-
@BeforeClass
-
@Before
-
@Test
-
@After
-
@AfterClass
-
Assume
,Assert
Estender BaseHostJunit4Test é uma maneira de herdar APIs de utilitários de teste úteis, como:
-
installPackage
: Permite instalar um APK no dispositivo de destino. -
installPackageAsUser
: permite instalar um APK como usuário no dispositivo de destino. -
uninstallPackage
: Permite desinstalar um APK. -
isPackageInstalled
: verifica se um pacote está instalado ou não. -
hasDeviceFeature
: verifique se o dispositivo suporta um recurso ou não. (pm list features
) -
runDeviceTests(DeviceTestRunOptions options)
: execute um teste de instrumentação em um dispositivo de destino usando DeviceTestRunOptions para lidar com todas as opções possíveis.
Forneça também acesso ao objeto de dispositivo Tradefed:
-
getDevice()
: Retorna um objeto de dispositivo TF para manipular o dispositivo. -
getBuild()
: Retorna um objeto TF de informações de construção para obter informações sobre a construção. -
getAbi()
: Retorna a ABI em que o teste está sendo executado.
Suporte Tradefed: preparação e limpeza de dispositivos por classe
JUnit4 @BeforeClass
e @AfterClass
são aplicáveis apenas a métodos estáticos, o que torna impossível usar o manipulador #getDevice()
para fazer alguma configuração ou limpeza específica do dispositivo, única e por classe. Para resolver esse problema, use a anotação Tradefed.
- @BeforeClassWithInfo: é executado antes das anotações @BeforeClass
- @AfterClassWithInfo: é executado após anotações @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
permite usar o dispositivo e armazenar propriedades que podem ser usadas no escopo estático ou não estático. BaseHostJUnit4Test
suporta a obtenção de TestInformation
em um escopo não estático via #getTestInformation()
.
Se você não estiver estendendo BaseHostJUnit4Test
, poderá implementar ITestInformationReceiver
para receber o objeto TestInformation
.
Como configurar um teste controlado por host no Tradefed?
No arquivo de configuração XML Tradefed, os testes controlados por host são executados por meio do executor HostTest .
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>