Issue
Assuming my Application class is like following:
import android.app.Application;
public class MyApp extends Application {
public String example(){
return "Test";
}
}
I have some instrumented tests for testing UI. Assuming I have the following test:
public class MyMainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
MainActivity.class);
@Test
public void firstTest(){
onView(withId(R.id.textBt)).perform(click());
// ...
}
}
I want to mock example() method inside MyMainActivityTest, let's say that it should return Mock Test instead of Test. How to do it?
Solution
You should create Class which extends your Application class and put it into test folder.
public class MyTestApp extends MyApp {
public String example(){
return "SuperTest";
}
}
Then use @Config Annotation from Robolectric library over your test class:
@Config(application = MyTestApp)
This should work for all kind of tests including Espresso UI tests, if it isn't you can try to use custom TestRunner with your TestApp class like this:
public class MyRunner extends AndroidJUnitRunner {
@Override
public Application newApplication(ClassLoader cl, String className, Context context)
throws Exception {
return super.newApplication(cl, MyTestApp.class.getName(), context);
}
}
And put this over your Test class: @RunWith(MyRunner.class)
Answered By - Anton Kazakov
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.