Skip to content

RuntimeException: Error invoking setter with parameter class Module on object DaggerComponentBuilder #92

@SammyOdenhoven

Description

@SammyOdenhoven

Hi there,

First off, thank you very much for your library and great work.

I've been trying to set up DaggerMock in our project, but I'm running into some problems.
Our ApplicationComponent:

@Singleton
@Component(modules = {ApplicationModule.class, NetworkModule.class, ApiKeyModule.class, InAppPurchaseModule.class})
public interface ApplicationComponent {

	//region Created for testing purposes
	TestComponent plus(TestComponent.TestModule module);
	//endregion

	ManageSubscriptionActivityComponent plus(ManageSubscriptionActivityComponent.ManageSubscriptionActivityModule module);

}

ManageSubscriptionComponent & -Module:

@PerScreen
@Subcomponent(modules = [(ManageSubscriptionActivityComponent.ManageSubscriptionActivityModule::class)])
interface ManageSubscriptionActivityComponent : BaseActivityComponent<ManageSubscriptionActivity> {

    @Module
    class ManageSubscriptionActivityModule internal constructor(
            activity: ManageSubscriptionActivity
    ) : BaseActivityModule<ManageSubscriptionActivity>(activity) {
        @Provides
        @PerScreen
        fun activityCheckout(activity: Activity, billing: Billing): ActivityCheckout {
            return Checkout.forActivity(activity, billing)
        }
        @Provides
        @PerScreen
        fun provideGetSubscriptionPriceInteractor(subscriptionManager: SubscriptionManager): GetSubscriptionPriceInteractor {
            return GetSubscriptionPriceInteractor(subscriptionManager)
        }
    }
}

Test:

class ManageSubscriptionsPresenterTest : BasePresenterIntegrationTest() {

    private val mockView = mock<ManageSubscriptionView>()

    val mockGetSubscriptionPriceInteractor: GetSubscriptionPriceInteractor = mock()

    @InjectFromComponent(TestPresenterProvider::class) lateinit var presenter: ManageSubscriptionPresenter
    @InjectFromComponent(TestPresenterProvider::class) lateinit var oauthTokenStore: OAuthTokenStore

    private val context = ApplicationProvider.getApplicationContext<Context>()
    
    @Test
    fun `setup with T3 scenario should show trial will renew`() {
        // GIVEN

        // WHEN
        presenter.attachView(mockView)

        // THEN
        inOrder(mockView).apply {
            verify(mockView, times(1)).showLoadingState()
            verify(mockView, times(1)).showContentState()
        }
    }
}

with DaggerMockRule:

class RobolectricDaggerMockTestRule : DaggerMockRule<ApplicationComponent>(
        ApplicationComponent::class.java,
        createTestApplicationModule(app),
        NetworkModule(),
        ManageSubscriptionActivityComponent.ManageSubscriptionActivityModule(activity)
) {

    companion object {
        private val app: App
            get() = ApplicationProvider.getApplicationContext()

        private val activity: ManageSubscriptionActivity
            get() = mock()
    }

    init {
        set { component -> component.inject(app) }
    }
}

When running this test, I get the following error:
java.lang.RuntimeException: Error invoking setter with parameter class com.rubicoin.invest.ui.managesubscription.ManageSubscriptionActivityComponent$ManageSubscriptionActivityModule on object com.rubicoin.invest.injection.component.DaggerApplicationComponent$Builder@5bde6148

Thank you in advance for your help!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions