7

I have following android test class

@HiltAndroidTest
@UninstallModules(PreferencesModule::class, CacheModule::class)
class PlayerRepositoryTest {

private val fakeServer = FakeServer()
private lateinit var repository: PlayerRepository
private lateinit var api: GameApi
private lateinit var cache: Cache

@get: Rule
var hiltRule = HiltAndroidRule(this)

@get: Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()

@Inject
lateinit var database: GameDatabase

@Inject
lateinit var retrofitBuilder: Retrofit.Builder


@Inject
lateinit var apiPlayerMapper: ApiPlayerDetailsMapper

@Inject
lateinit var apiPaginationMapper: ApiPaginationMapper

@BindValue
@JvmField
val preferences: Preferences = FakePreferences()

@Module
@InstallIn(SingletonComponent::class)
object TestCacheModule {

    @Provides
    fun provideRoomDatabase(): GameDatabase {
        return Room.inMemoryDatabaseBuilder(
            InstrumentationRegistry.getInstrumentation().context,
            GameDatabase::class.java
        )
            .allowMainThreadQueries()
            .build()
    }
}

@Before
fun setup(){
    fakeServer.start()

    preferences.deleteTokenInfo()
    preferences.putToken("validToken")
    preferences.putTokenExpirationTime(Instant.now().plusSeconds(3600).epochSecond)
    preferences.putTokenType("Bearer")

    hiltRule.inject()

    api = retrofitBuilder
        .baseUrl(fakeServer.baseEndpoint)
        .build()
        .create(GameApi::class.java)

    cache = RoomCache(database.sportDao(), database.playerDao())

    repository = PlayerRepositoryIml(
        api,
        cache,
        apiPlayerMapper,
        apiPaginationMapper
    )
}

@Test
fun requestMorePlayers_success() = runBlocking{
    //Given
    val expectedAnimalId =124L
    fakeServer.setHappyPathDispatcher()

    //When
    val paginatedPlayers = repository.requestMorePlayers(1, 100)

    //Then
    val player = paginatedPlayers.players.first()
    assertThat(player.id).isEqualTo(expectedAnimalId)
}

@After
fun tearDown(){
    fakeServer.shutdown()
  }
}

When I run this test file I get the following error:

D:\android projects\cricket\app\build\generated\hilt\component_sources\debugAndroidTest\common\data\PlayerRepositoryTest_TestComponentDataSupplier.java:8: error: cannot find symbol

import dagger.hilt.android.internal.testing.root.DaggerPlayerRepositoryTest_HiltComponents_SingletonC;

symbol: class DaggerPlayerRepositoryTest_HiltComponents_SingletonC

location: package dagger.hilt.android.internal.testing.root

D:\android projects\generated\hilt\component_sources\debugAndroidTest\dagger\hilt\android\internal\testing\root\PlayerRepositoryTest_HiltComponents.java:137: error: [Dagger/MissingBinding] sourabh.pal.cricket.common.data.cache.Cache cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,

Fadedrifleman
  • 197
  • 2
  • 12
nick.tdr
  • 4,627
  • 4
  • 28
  • 41
  • Were you able to solve this issue? I'm facing it as well and from my research, it might be related with other dependencies of the project – João Graça Oct 21 '22 at 16:40
  • Any solution to this? I found this: https://medium.com/@patrykpoborca/dagger-2-and-base-classes-generics-and-presenter-injection-7d82053080c For me, when I am adding @HiltAndroidTest to the base class which uses generic I am getting error. So, quick and dirty solution was to remove generics – Pulkit Jan 27 '23 at 21:00

0 Answers0