Bom dia a todos
Eu estou fazendo um projeto, e neste momento tentei utilizar o navigation test para fazer os testes de UI. Só que meu app também tem o Hilt e eu tive que configurar ambos para rodar os testes.
Ao fazer os testes, tive uma série de problemas, e acabei emperrando neste aqui:
java.lang.IllegalStateException: Given component holder class androidx.activity.ComponentActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager
//resto do erro oculto
at br.com.alura.mundobola.MainActivityKt.TelaApp(MainActivity.kt:149)
at br.com.alura.mundobola.auxiliardoteste.PreparacaoDosTestesKt.preparacaoDosTestes(PreparacaoDosTestes.kt:15)
at br.com.alura.mundobola.ui.screen.CadastroDeBolasScreenKtTest$preparaNavHostController$1.invoke(CadastroDeBolasScreenKtTest.kt:34)
at br.com.alura.mundobola.ui.screen.CadastroDeBolasScreenKtTest$preparaNavHostController$1.invoke(CadastroDeBolasScreenKtTest.kt:33)
Esse erro em questão nao roda o composable da tela do app no teste. O código está assim:
@HiltAndroidTest
class CadastroDeBolasScreenKtTest{
@get:Rule(order = 0)
val hiltRule = HiltAndroidRule(this)
@get:Rule(order = 1)
val testeDoNavigation = createComposeRule()
private lateinit var navController: NavHostController
@Before
fun preparaNavHostController(){
testeDoNavigation.setContent {
navController = preparacaoDosTestes()
hiltRule.inject()
}
}
@Test
fun deveMostrarFabENomeApp_QuandoEstiverNaTelaDeBolas(){
testeDoNavigation.verificaSeMostraOComponentPeloTexto(tituloTelaLista)
testeDoNavigation.verificaSeNaoMostraOComponentPeloTexto(tituloTelaCadastro)
testeDoNavigation.verificaSeNaoMostraOComponentPeloTexto(tituloTelaDetalhes)
testeDoNavigation.verificaSeMostraOComponentePelaDescricao(iconeFABDescricao)
testeDoNavigation.verificaSeNaoMostraOComponentePelaDescricao(iconeBuscaDescricao)
testeDoNavigation.verificaSeNaoMostraOComponentePelaDescricao(iconeDeletarDescricao)
testeDoNavigation.verificaSeNaoMostraOComponentePelaDescricao(iconeEdicaoDescricao)
testeDoNavigation.verificaSeNaoMostraOComponentePelaDescricao(iconeVoltarDescricao)
}
}
função preparacaoDosTestes(), que roda o composable da tela:
@Composable
fun preparacaoDosTestes(): TestNavHostController {
val navController = TestNavHostController(context = LocalContext.current)
navController.navigatorProvider.addNavigator(ComposeNavigator())
TelaApp(navController)
return navController
}
Encontrei no fórum alguns fórum, como este e outro, falando sobre um problema de compatibilidade de versão do navigation com o hilt, tentei mudar as versões e mesmo assim não funcionou.
meu build.gradle(app):
//só deixei o essencial do build.gradle
android {
defaultConfig {
testInstrumentationRunner = "br.com.alura.mundobola.ConfiguradorTesteHilt"
}
}
dependencies {
val navigationVersion = "2.7.3"
// https://mvnrepository.com/artifact/androidx.navigation/navigation-compose
implementation ("androidx.navigation:navigation-compose:$navigationVersion")
// https://mvnrepository.com/artifact/androidx.datastore/datastore-preferences
implementation ("androidx.datastore:datastore-preferences:1.0.0")
// https://mvnrepository.com/artifact/androidx.navigation/navigation-testing
androidTestImplementation ("androidx.navigation:navigation-testing:$navigationVersion")
val hiltVersion = "2.48"
implementation ("com.google.dagger:hilt-android:$hiltVersion")
kapt("com.google.dagger:hilt-compiler:$hiltVersion")
implementation ("androidx.hilt:hilt-navigation-compose:1.1.0")
androidTestImplementation("com.google.dagger:hilt-android-testing:$hiltVersion")
kaptAndroidTest("com.google.dagger:hilt-android-compiler:$hiltVersion")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
}
Como eu posso corrigir esse erro? e no meu caso, é mesmo a incompatibilidade de versão de ambos as bibliotecas?
Ps: meu projeto no github para dar uma olhada melhor no problema