overriding @Module
classes with Dagger 2 [in tests]
ActivityTestRule, Building Instrumented Unit Tests, JUnit4 Rules with Testing Support Library, Testing Support Library, Getting Started with Testing
Example:
Main application code
[code language=”java”]<br> public class MainApplication extends Application {</p> <p> protected MainAppComponent initComponent() {<br> return DaggerMainAppComponent.builder()<br> .applicationModule(new ApplicationModule(this))<br> .build();<br> }</p> <p> @Override<br> public void onCreate() {<br> mComponent = initComponent();<br> }<br> }<br> [/code]
test application code
[code language=”java”]<br> public class TestApplication extends MainApplication {</p> <p> @Override<br> protected TestAppComponent initComponent() {<br> return DaggerTestAppComponent.builder()<br> .applicationModule(new TestApplicationModule(this))<br> .build();<br> }<br> }<br> [/code]
Component code
[code language=”java”]<br> public interface TestAppComponent extends MainAppComponent {<br> //code<br> }<br> [/code]
Main module code
[code language=”java”]<br> @Module<br> public class ApplicationModule {</p> <p> @Singleton<br> @Provides<br> public IFooManager provideFooManager() {<br> // our code<br> }<br> }<br> [/code]
Test module code
[code language=”java”]<br> public class TestApplicationModule extends ApplicationModule {</p> <p> @Override<br> public IFooManager provideFooManager() {<br> // our code of mock manager<br> }<br> }<br> [/code]
AndroidJUnitRunner
[code language=”java”]<br> public class TestApplicationRunner extends AndroidJUnitRunner {<br> @Override<br> public Application newApplication(ClassLoader cl, String className, Context context) throws IllegalAccessException, ClassNotFoundException, InstantiationException {<br> return super.newApplication(cl, TestApplication.class.getName(), context);<br> }<br> }<br> [/code]
and put the runner to module build.gradle
[code]<br> def DAGGER_VERSION = ‘2.10’<br> dependencies {<br> testApt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"<br> androidTestApt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"<br> }<br> android {<br> defaultconfig {<br> // Test instrumentation configurations<br> testApplicationId "com.myapp.test"<br> testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"<br> testInstrumentationRunner "uitesting.core.runner.TestApplicationRunner"<br> testHandleProfiling true<br> testFunctionalTest true<br> }<br> }<br> [/code]
test class code
[code language=”java”]<br> @LargeTest<br> @RunWith(AndroidJUnit4.class)<br> public class RegistrationTest {</p> <p> @Rule<br> public ApplicationTestRule<TestApplication> appRule = new ApplicationTestRule<>(TestApplication.class);</p> <p> @Inject<br> IFooManager manager;</p> <p> @Before<br> public void setUp() {<br> TestApplication app;<br> app = (TestApplication) InstrumentationRegistry.getInstrumentation().getTargetContext().getApplicationContext();<br> ((TestAppComponent)(app).getComponent()).inject(this);<br> }<br> }<br> [/code]