2

I am trying to test Worker but i can't inject it

Error while gradle building:

Dagger does not support injecting @AssistedInject type,
com.hussien.quoty.sync.NotificationWorker. Did you mean to inject its assisted factory type instead?
    public com.hussien.quoty.sync.NotificationWorker notificationWorker;

Test Class

@ExperimentalCoroutinesApi
@MediumTest
@RunWith(AndroidJUnit4::class)
@HiltAndroidTest
class NotificationWorkerTest {

    private lateinit var notificationManager: NotificationManager

    @get:Rule
    var hiltRule = HiltAndroidRule(this)

    //NOTE: HERE AM TRYING TO INJECT IT
    @Inject
    lateinit var notificationWorker: NotificationWorker

    @Before
    fun setUp() {
        hiltRule.inject()

        val context = ApplicationProvider.getApplicationContext<Context>()
        notificationManager =
            context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    }

    @Test
    fun doWork() = runTest {
        notificationWorker.doWork()
        assertThat(
            notificationManager.activeNotifications.map { it.id },
            hasItem(NotificationUtils.QUOTES_NOTIFICATION_ID)
        )
    }
}

Worker Class

@HiltWorker
class NotificationWorker @AssistedInject constructor(
    @Assisted context: Context,
    @Assisted workerParams: WorkerParameters,
    private val repository: QuotesRepository,
    private val settingsDataStoreManager: SettingsDataStoreManager,
    private val notificationUtils: NotificationUtils,

): CoroutineWorker(context, workerParams) {

    override suspend fun doWork(): Result {
        val settings = settingsDataStoreManager.settingsPreferencesFlow.first()
        val randomQuote = repository.getRandomQuote(settings.tags, settings.languages)
        notificationUtils.sendQuoteNotification(randomQuote)
        return Result.success()
    }

    companion object {
        const val TAG = "notification_worker"
    }
}
Hussien Fahmy
  • 1,119
  • 6
  • 24

0 Answers0