please check this code. as I am trying to add the repository with @BindValue. the hilt is throwing error as follows ( issue found in hilt version 2.14)
See original GitHub issueplease 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: RandomUserRepositoryImplTest = mock()
@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
Hilt version 2.14
Issue Analytics
- State:
- Created a year ago
- Comments:9
Top GitHub Comments
Thank you so much @bcorso
@sheiapp the entry point from the error message is coming from a component in
RandomUserActivityTest
, but the test in your snippet isRandomUserListFragmentTest
. You will have to add the bindings to that test as well (though, if you end up doing this for every test you should also look into@TestInstallIn
).It should be fine to inject
RandomUserRepositoryImplTest
into your test since the test is providing the binding into theSingletonComponent
.