2015-05-12 13 views
11

Mam aplikację Quiz za pomocą Realm db. Za każdym razem, gdy użytkownik wybierze odpowiedź, klika przycisk i pojawia się nowy tekst pytania. To się dzieje, aż osiągnie koniec, w którym zaczynam nową aktywność i wyświetlam wynik oparty na prawidłowych odpowiedziach.Rozpoczęcie działania do testowania

Jak powinienem uruchomić/testować (przy pomocy espresso, jak sądzę) tę aktywność bez konieczności ręcznego wprowadzania za każdym razem wszystkie odpowiedzi i kliknij przycisk po każdej odpowiedzi, aż dojdę do ostatniej?

Co potrzebne jest do przekazywania niektórych danych makiety do zmiennej i dokonać Intent, ale nie wiem jak i nie mogę znaleźć nic związanego z tym w Espresso

+0

Co jeśli się tej działalności jako działalności wyrzutni tak, że aktywność jest pierwszą czynnością wasze pokazy aplikacji? –

+0

hmm Myślę, że jest to możliwe, ale nie jestem pewien, czy jest to "dobra" praktyka i czy mogę zmienić moją strukturę plików src tylko do testów. – t0s

+0

To jest twoja aplikacja. Testujesz to. Możesz zmienić pliki src tylko w celu testowania, a następnie powrócić. –

Odpowiedz

1

pierwsze, patrz na to pytanie: Android Monkey Runner

Następnie możesz zobaczyć te przewodniki: Monkey Runner

To sprawia, że ​​używaszPython do testowania aktywności Androida poza źródłem. Tak, można wywołać rzeczy i dostać się do konkretnego activitiesl tak:

#! /usr/bin/env monkeyrunner 

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
from random import randint 

print "get device" 
device = MonkeyRunner.waitForConnection() 
package = 'my.packaget' 
activity = 'my.package.activity' 
runComponent = package + '/' + activity 
device.startActivity(component=runComponent) 

#use commands like device.touch and device.drag to simulate a navigation and open my activity 

#with your activity opened start your monkey test 
print "start monkey test" 
for i in range(1, 1000): 
    #here i go emulate only simple touchs, but i can emulate swiper keyevents and more... :D 
    device.touch(randint(0, 1000), randint(0, 800), 'DOWN_AND_UP') 

print "end monkey test" 

zapisać go, a następnie uruchomić: monkeyrunner test.py

+0

dzięki za linki. Na pewno je sprawdzę i złożę raport. – t0s

34

można uruchomić kolejną aktywność z niestandardowych intencji jak ten:

@RunWith(AndroidJUnit4.class) 
public class NextActivityTest { 

    @Rule 
    public ActivityTestRule<NextActivity> activityRule 
    = new ActivityTestRule<>(
     NextActivity.class, 
     true,  // initialTouchMode 
     false); // launchActivity. False to customize the intent 

    @Test 
    public void intent() { 
    Intent intent = new Intent(); 
    intent.putExtra("your_key", "your_value"); 

    activityRule.launchActivity(intent); 

    // Continue with your test 
    } 
} 

Pełny przykład: https://github.com/chiuki/android-test-demo

Blog post: http://blog.sqisland.com/2015/04/espresso-21-activitytestrule.html

+0

Czy mogę użyć tego razem z UiAutomatorem, aby przetestować moje powiadomienia? –

+0

@ chiuki Próbuję ten sam kod i pokazuje zielony, ale gdy dodaję 'przeznaczony (hasComponent (NextActivity.class.getName()));' Mam 'NullPointerException: Próba wywołania metody wirtualnej 'void android .support.test.espresso.intent.Intents.internalIntended (org.hamcrest.Matcher, android.support.test.espresso.intent.VerificationMode, java.util.List) "na odwołaniu do obiektu zerowego" –

-1

Możesz użyć intencji do uruchomienia działania dialera za pomocą poniższego kodu.

@Rule  
public IntentsTestRule<DialerActivity> mActivityRule = new IntentsTestRule<>(
      DialerActivity.class); 

    private static final String PHONE_NUMBER = "1234567890"; 
    private static final Uri INTENT_DATA_PHONE_NUMBER = Uri.parse("tel:" + PHONE_NUMBER); 
    private static String PACKAGE_ANDROID_DIALER = "com.android.phone"; 

    static { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      // Starting with Android Lollipop the dialer package has changed. 

      PACKAGE_ANDROID_DIALER = "com.android.server.telecom"; 
     } 
    } 

    @Test public void testDialerIntent()throws Exception 
    { 
     intending(not(isInternal())).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null)); 
     onView(withId(R.id.edit_text_caller_number)).perform(typeText(PHONE_NUMBER)); 
     onView(withId(R.id.button_call_number)).perform(click()); 
     intended(allOf(
       hasAction(Intent.ACTION_CALL), 
       hasData(INTENT_DATA_PHONE_NUMBER), 
       toPackage(PACKAGE_ANDROID_DIALER))); 
    } 


} 

Dla bardziej szczegółowy opis patrz mój post na blogu - http://qaautomated.blogspot.in/2016/02/how-to-test-dialer-activity-with.html

+0

skopiuj wklej, bez żadnych wyjaśnienie, co się dzieje lub w kontekście z pytaniem. –