please check this code. as I am trying to add the repository with @BindValue. the hilt is throwing error as follows

280 views Asked by At

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...

1

There are 1 answers

0
Alexander Smith On

I had the same error, but the issue was actually a missing @Provides method in my AppModuleTest. I had added a new method to my AppModule 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.