GOVIND DIXIT Segue 25 de junho · 4 min ler
Qual é o nosso objetivo, o que vamos fazer e por quê?
Como o título sugere, o objetivo é gerar os relatórios de cobertura de teste unificados de um projeto Android. Nós estaremos criando teste unitário e teste instrumentado para uma parte específica do código e, em seguida, geraremos os relatórios de cobertura para cada um deles. Nosso objetivo é mesclar os relatórios e produzir um relatório unificado.
Os relatórios de cobertura de teste são uma ferramenta importante para medir o quanto nossos testes realmente exercitam nosso código e ajudam a determinar a área que precisa ser melhorada. Embora não tenha garantido um software livre de erros, mas uma alta porcentagem de cobertura pode evitar muitas dores de cabeça no projeto.
Vamos começar a construir
Primeiro de tudo, crie um projeto Android, para mim é TestCoverage .
Inclua as seguintes dependências necessárias no seu nível de aplicativo build.gradle
para executar testes e sincronizar novamente o gradle.
// Para testes unitários
testImplementation 'junit: junit: 4.12'
testImplementation 'org.mockito: mockito-inline: 2.27.0'
// Para testes de interface do usuário
androidTestImplementation 'com.android.support.test: runner: 1.0.2'
androidTestImplementation 'com.android.support.test: rules: 1.0.2'
androidTestImplementation 'com.android.support.test.espresso: espresso-core: 3.0.2'
Para gerar o relatório de cobertura, estaremos usando Jacoco ( Ja va Co de Co verage), uma das ferramentas mais utilizadas em Java para esse fim.
aplicar plugin: 'buildTypes jacoco-android' {
debug {
testCoverageEnabled true
}
lançamento {
minifyEnabled false
proguardFiles getDefaultProguardFile ('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
} testOptions {
animationsDisabled true
unitTests {
includeAndroidResources = true
}
}
Nós criamos uma nova depuração de tipo de construção e fizemos testCoverageEnabled true. Isso fará com que nossos testes de IU sejam executados para o buildType de depuração. Além disso, desativamos as animações para executar corretamente nossos testes de interface do usuário.
MainActivity.kt
activity_main.xml
Além do conjunto principal de fontes, temos dois artefatos de teste diferentes em nosso projeto Android, geralmente representados pelas pastas de teste e androidTest. Nós estaremos armazenando nossos testes de unidade na pasta de teste e teste de interface do usuário na pasta androidTest.
Testes Unitários
Para executar os testes de unidade, podemos usar o comando abaixo mencionado
testes de gradlew
Testes Instrumentados
Nós usaremos a estrutura Espresso para escrever testes de interface do usuário. O teste abaixo irá verificar se o texto é alterado ao clicar no botão ou não.
Para executar os testes de interface do usuário, podemos usar o comando abaixo mencionado
gradlew connectedCheck
O comando abaixo gerará os relatórios de cobertura necessários para testes da interface do usuário
gradlew createCoverageReport
Agora, como mesclar os resultados de cobertura desses dois grupos de teste?
O problema aqui é que o Espresso gera. arquivo ec , Enquanto a unidade testa a execução gera o arquivo .exec . nós temos dois formatos diferentes!
Precisamos converter um formato para outro ou qualquer outra coisa?
Nós não precisamos converter um formato para outro, em vez disso, podemos configurar o Jacoco para mesclar os dois relatórios. Como não podemos configurar a tarefa de cobertura do Espresso, devemos garantir que ele seja executado primeiro, os testes de unidade mais tarde e, em seguida, criar os dados de cobertura com os dois arquivos ( ec e exec ).
Para habilitar isso, precisamos editar nossa tarefa mais uma vez e adicionar o arquivo .ec de cobertura como um parâmetro na propriedade executionData :
Adicione o seguinte arquivo jacoco.gradle no módulo do aplicativo.
jacoco.gradle
Agora você pode usar o comando abaixo para gerar um relatório de cobertura unificado.
gradlew connectedAndroidTest jacocoTestReport
Se você está enfrentando dificuldades em conectar as coisas.
aqui está o repositório demonstrando o mesmo trabalho. ?