-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Description
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
Labels
No labels