please check this code. as I am trying to add the repository with @BindValue. the hilt is throwing error as follows.
@HiltAndroidTest
@UninstallModules(AppModule::class)
@RunWith(AndroidJUnit4::class)
class RandomUserListFragmentTest {
@get:Rule
val hiltRule = HiltAndroidRule(this)
@Inject
lateinit var glideRequestManager: RequestManager
@BindValue
@JvmField val repository:RandomUserRepository= RandomUserRepositoryImplTest()
@Before
fun launchFragment() {
hiltRule.inject()
ActivityScenario.launch(RandomUserActivity::class.java)
}
@Test
fun verifyTheRecyclerViewHasData(){
Espresso.onView(ViewMatchers.withId(R.id.recyclerView)).check { view, noViewFoundException ->
if (noViewFoundException != null) {
throw noViewFoundException
}
val recyclerView = view as RecyclerView
Assert.assertEquals(3, recyclerView.adapter?.itemCount)
}
}
}
@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [AppModule::class]
)
object FakeAppModuleTest {
@Provides
@Singleton
fun initGlide(@ApplicationContext appContext: Context): RequestManager = Glide.with(appContext)
.setDefaultRequestOptions(
RequestOptions()
.centerInside()
.error(R.drawable.ic_user)
)
}
getting errors like
Task :app:hiltJavaCompileDebugAndroidTest /Users/shaheer/AndroidStudioProjects/ssassignment/app/build/generated/hilt/component_sources/debugAndroidTest/com/ss/assignment/ui/random_user_ui/RandomUserActivityTest_TestComponentDataSupplier.java:8: error: cannot find symbol import dagger.hilt.android.internal.testing.root.DaggerRandomUserActivityTest_HiltComponents_SingletonC; ^ symbol: class DaggerRandomUserActivityTest_HiltComponents_SingletonC location: package dagger.hilt.android.internal.testing.root /Users/shaheer/AndroidStudioProjects/ssassignment/app/build/generated/hilt/component_sources/debugAndroidTest/com/ss/assignment/ui/random_user_ui/main_screen/RandomUserListFragmentTest_TestComponentDataSupplier.java:8: error: cannot find symbol import dagger.hilt.android.internal.testing.root.DaggerRandomUserListFragmentTest_HiltComponents_SingletonC; ^ symbol: class DaggerRandomUserListFragmentTest_HiltComponents_SingletonC location: package dagger.hilt.android.internal.testing.root /Users/shaheer/AndroidStudioProjects/ssassignment/app/build/generated/hilt/component_sources/debugAndroidTest/dagger/hilt/android/internal/testing/root/RandomUserActivityTest_HiltComponents.java:133: error: [Dagger/MissingBinding] com.ss.assignment.data.repository.RandomUserRepository cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements SunAndSandsApp_GeneratedInjector, ^ com.ss.assignment.data.repository.RandomUserRepository is injected at com.ss.assignment.ui.random_user_ui.RandomUserSharedViewModel(randomUserRepository) com.ss.assignment.ui.random_user_ui.RandomUserSharedViewModel is injected at com.ss.assignment.ui.random_user_ui.RandomUserSharedViewModel_HiltModules.BindsModule.binds(arg0) @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.String,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [dagger.hilt.android.internal.testing.root.RandomUserActivityTest_HiltComponents.SingletonC → dagger.hilt.android.internal.testing.root.RandomUserActivityTest_HiltComponents.ActivityRetainedC → dagger.hilt.android.internal.testing.root.RandomUserActivityTest_HiltComponents.ViewModelC] 3 errors
please correct me if I am doing some mistakes here...
I had the same error, but the issue was actually a missing
@Provides
method in myAppModuleTest
. I had added a new method to myAppModule
class but forgot to include it in my test module. Even though the new value wasn't being used by any of my tests, adding it to the test module solved the problem and allowed my tests to run.