fabioCollini / DaggerMock

A JUnit rule to easily override Dagger 2 objects
Apache License 2.0
1.16k stars 96 forks source link

DaggerMock rule in Espresso with injected dependencies used in App's onCreate #88

Open mariusgherman opened 5 years ago

mariusgherman commented 5 years ago

I want to write an Espresso test and mock dependencies that are also used in Application's onCreate.

I have an app that needs to register lifecycle observers in Application onCreate. The lifecycle observer is an @Inject dependency

public class MyApplication extends Application {
        @Inject
        lateinit var lifecycleObserver: LifecycleObserver

        override fun onCreate() {
            super.onCreate()
            inject()
            ProcessLifecycleOwner.get().getLifecycle().addObserver(lifecycleObserver);
        }
}

What I'm seeing that the DaggerMock rule is created after the App onCreate is called in my Espresso test.

Is there anyway around this, to get my DaggerMock rule created before my Application's onCreate and provide me a mock of lifecycleObserver ? Thanks

fabioCollini commented 5 years ago

Hi, sorry for the late answer :( I am not sure if you can create before the app is created because usually you need the application object to create the Dagger component. How do you set the component in the application object? Maybe you can inject the app again and register the observer when you set the component created by DaggerMock.