Como acessar arquivos de teste de diferentes pacotes de teste (Unit e Instrumented) em Android
Publicado em 19 de fevereiro, 2022
Última atualização 24 de março, 2024
TL;DR
Crie um diretório chamado testCommon
e adicione o trecho de código abaixo ao seu arquivo build.gradle
.
android {
...
sourceSets {
test { java.srcDirs += src/testCommon }
androidTest { java.srcDirs += src/testCommon }
}
}
Você já esteve em uma situação em que precisa acessar arquivos utilitários tanto do pacote test
quanto do androidTest
? Se sim, este artigo pode ser útil para você.
Digamos que você tenha um arquivo chamado Placeholders.kt
no qual você usa seus valores
como test doubles para seus testes de unidade.
Nosso cenário de teste neste caso será o retorno Success
do método login de uma
classe chamada LoginUseCaseImpl
.
Por exemplo:
// test/Placeholders.kt
object Placeholders {
const val email = "johndoe@email.com"
const val password = "strongpassword123"
}
// test/LoginUseCaseImplTest.kt
class LoginUseCaseImplTest {
private val loginUseCase = LoginUseCaseImpl()
@Test
fun `when call login should return Success`() {
// Arrange
val email = Placeholders.email
val password = Placeholders.password
// Act
val result = loginUseCase.login(email, password)
// Assert
assertEquals(Success, result)
}
}
Agora, precisamos escrever Testes instrumentados usando Espresso para validar o fluxo de login completo. O cenário é: ao preencher os campos de e-mail e senha e tocar no botão de login então uma mensagem de sucesso será exibida.
// androidTest/LoginScreenInstrumentedTest.kt
class LoginScreenInstrumentedTest {
@Test
fun when_fill_the_email_and_password_fields_and_tap_the_login_button_then_a_success_message_will_display() {
// Arrange
val email = Placeholders.email
val password = Placeholders.password
// When fill email and password fields
onView(withId(R.id.email_field)).perform(ViewActions.typeText(email))
onView(withId(R.id.password_field)).perform(ViewActions.typeText(password))
// And tap the login button
onView(withId(R.id.login_button)).perform(ViewActions.click())
// Then a success message will display.
onView(withId(R.id.success_message)).check(matches(isDisplayed()))
}
}
Por padrão, o teste utilizando o Espresso estará dentro do pacote androidTest
, mas nosso Placeholders.kt
está disponível apenas dentro do pacote test
, no qual nosso LoginUseCaseImplTest
também está localizado.
Portanto, o Teste Instrumentado acima não encontrará o Placeholders.kt
.
Para permitir que ambos os testes acessem o mesmo arquivo, precisamos criar um novo pacote dentro do src
que iremos colocar o Placeholders.kt
.
Neste exemplo, vamos nomeá-lo como testCommon
. Depois disso, precisamos dizer ao gradle para considerar este novo pacote
como um pacote test
e androidTest
. Colocaremos o código abaixo em nosso arquivo build.gradle
:
android {
...
sourceSets {
test { java.srcDirs += src/testCommon }
androidTest { java.srcDirs += src/testCommon }
}
}
É isso! Agora ambos os pacotes de teste poderão acessar nosso arquivo Placeholders.kt
!