Reputation: 73
I am trying to write unit test case for my compose screen. I am using roboelectric and hilt. But when i run test its throwing error Given component holder class androidx.activity.ComponentActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager java.lang.IllegalStateException: Given component holder class androidx.activity.ComponentActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager at dagger.hilt.EntryPoints.get(EntryPoints.java:62) at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.createInternal(HiltViewModelFactory.java:206) at androidx.hilt.navigation.HiltViewModelFactory.create(HiltNavBackStackEntry.kt:75) at androidx.hilt.navigation.compose.HiltViewModelKt.createHiltViewModelFactory(HiltViewModel.kt:95) at com.riyadhair.digital.mobile.ui.screens.dashboard.login.signup.LoginScreenKt.LoginScreen(LoginScreen.kt:686)
This is my code
@HiltAndroidTest
@Config(application = HiltTestApplication::class)
@RunWith(RobolectricTestRunner::class)
class LoginScreenTest {
@get:Rule
var hiltRule = HiltAndroidRule(this)
@get:Rule
val composeTestRule = createComposeRule()
val navHostController = mock<NavHostController>()
val baseActivityViewModel = mock<BaseActivityViewModel>()
@Before
fun setup() {
hiltRule.inject() // Ensure this is called before accessing any Hilt components
}
@Test
fun loginScreenTest() {
composeTestRule.setContent {
LoginScreen(navHostController = navHostController, baseActivityViewModel = baseActivityViewModel)
}
}
}
@Composable
fun LoginScreen(
navHostController: NavHostController,
baseActivityViewModel: BaseActivityViewModel?
) {
val context = LocalContext.current
val viewmodel = hiltViewModel<LoginViewModel>() // In this line throwing error
Upvotes: 0
Views: 53