Ich erstelle und Android-Anwendung. Ich benutze Espresso zum Testen.Aufruf einer Methode der getesteten Aktivität von einem Test mit Espresso und sehen Sie die Ergebnisse
Ich habe eine Aktivität mit der Methode:
public void render(Recipe recipe){
//draw the recipe to the activity
}
ich testen wollen, dass diese Methode richtig funktioniert.
arbeiten Nicht-Lösung 1
ich folgende
@Test
public void viewPaintsRecipes() {
final Activity activity = activityRule.launchActivity(new Intent());
((MainActivity)activity).render(Arrays.asList(new Recipe[]{recipe}));
onView(withId(R.id.text)).check(matches(withText(recipe.toString())));
}
ich eine Ausnahme erhalten getestet haben.
Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren.
arbeiten Nicht-Lösung 2
Ich habe auch von einem Handler in dem Haupt-Thread, aber der Test hängt die beiden Linien in einem runnable runned zu setzen versucht.
Wie kann ich das erreichen?
Hinweise
Ich lege den gesamten Test. Beachte, dass ich auch Dolch und Mockito benutze.
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTestWithMockPresenter {
Recipe recipe = new Recipe("sampleTitle");
@Rule
public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule(MainActivity.class, true, false);
@Mock
MainActivityPresenter mockPresenter;
@Mock
AndroidApplication mockContext;
@Before
public void insertMockedComponent(){
MockitoAnnotations.initMocks(this);
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
AndroidApplication app = (AndroidApplication) instrumentation.getTargetContext().getApplicationContext();
MyModule mockedMyModule = new MyModule(mockContext){
@Provides
public MainActivityPresenter getMainActivityPresenter(){
return mockPresenter;
}
};
MyComponent component = DaggerMyComponent.builder().myModule(mockedMyModule).build();
app.setComponent(component);
}
@Test
public void viewPaintsRecipes() {
final Activity activity = activityRule.launchActivity(new Intent());
((MainActivity)activity).render(Arrays.asList(new Recipe[]{recipe}));
onView(withId(R.id.text)).check(matches(withText(recipe.toString())));
}
}
Dank
löschen @ Mock Annotationen und sagen, wie es dann – piotrek1543
Ihre Mischung funktionieren würde Ing Unit Tests mit automatisierten Tests – piotrek1543
@ piotrek1543 Ich möchte die Mocks verwenden, weil ich nur die Aktivität testen möchte, nicht alle Ebenen (Presenter, Use Cases, etc). Wenn dies nicht der Fall ist, wie kann ich Activity-Methoden auf eine isolierte Art und Weise testen? – Mateu