Esta página descreve como criar um teste de dispositivo no estilo JUnit4 conduzido pelo host. Isso significa que o lado do host do chicote vai acionar ações contra o dispositivo.
Consideramos que os testes "do host" e "dirigidos pelo host" são um pouco diferentes:
- Teste orientado pelo host: é um teste executado no host que interage com um ou mais dispositivos. O sistema em teste (SUT) não está no host, mas está sendo testado pelo host.
- teste no lado do host: é um teste executado puramente no host e que testa algo somente no host, como em testes de unidade.
Por que criar um teste orientado por 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 comando de reinicialização. No caso de teste de instrumentação, uma reinicialização eliminaria de hardware, o teste não pôde continuar e nenhum resultado estaria disponível.
Os testes orientados por host também podem impulsionar outras etapas de configuração que exigem interação com dispositivos externos de que o teste depende.
Um teste orientado por host pode lidar com esses casos de uso e permitir testes avançados de o dispositivo com mais cenários. Se você está nessa situação, escrever um conduzido por host faz mais sentido.
Como os testes orientados por host são escritos no 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 conduzidos pelo host na Trade Federation são realizados pelo DeviceJUnit4ClassRunner executor de testes do JUnit4. A estrutura geral da classe de teste é a mesma que uma teste JUnit4 comum:
@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 um usuário no dispositivo de destino.uninstallPackage
: permite desinstalar um APK.isPackageInstalled
: verifica se um pacote está instalado ou não.hasDeviceFeature
: verifica se o dispositivo oferece suporte a 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 processar todas as opções possíveis.
Também forneça acesso ao objeto de dispositivo Tradefed:
getDevice()
: retorna um objeto de dispositivo do TF para manipular o dispositivo.getBuild()
: retorna um objeto do TF de informações do build para receber informações sobre o ser construído.getAbi()
: retorna a ABI em que o teste está sendo executado.
Suporte para Tradefed: limpeza e preparação de dispositivos por classe
@BeforeClass
e @AfterClass
do JUnit4 são aplicáveis apenas a métodos estáticos.
o que impossibilita o uso do gerenciador #getDevice()
para fazer algumas
específica para dispositivo, configuração ou limpeza única, por classe. Para resolver esse problema, use
a anotação Tradefed.
- @BeforeClassWithInfo: é executada antes das anotações @BeforeClass
- @AfterClassWithInfo: é executado após as 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
receber TestInformation
em um escopo não estático usando #getTestInformation()
.
Se você não estiver estendendo BaseHostJUnit4Test
, implemente
ITestInformationReceiver
para receber o objeto TestInformation
.
Como configurar um teste orientado por host no Tradefed?
No arquivo de configuração XML do Tradefed, os testes orientados por host são executados pelo executador HostTest.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>