2013-05-16 11 views
96

Właśnie pobrano aplikację Android Studio opartą na technologii Intellij Idea.Jak mogę utworzyć testy w Android Studio?

Jak utworzyć testy?

Zauważyłem tam jest opcja Utwórz moduł testowy, ale to nie wydaje się robić nic, tylko utworzyć nowy projekt z src

Próbowałem też naciskając klawisz CTRL + Alt + T, który pozwala do tworzenia testów jednostkowych na istniejącej klasie, ale wydaje się, że chce umieścić ją w bieżącym projekcie. Oczywiście to nie pomoże z TDD

Czy ktoś ma tutaj jakieś doświadczenie?

+2

Próbowałem również utworzyć projekt testowy. Jeśli zrobisz to za pomocą narzędzia wiersza poleceń systemu Android, podobnie jak w przypadku projektu Eclipse, pojawi się błąd, ponieważ nie może znaleźć pliku AndroidManifest.xml. Wygląda na to, że Google musi zaktualizować swoje narzędzie Android do obsługi projektów Grundle. Jednak jestem nowy w testowaniu w systemie Android, więc nie mogę ci pomóc = ( – Kage

Odpowiedz

3

Jedna z najważniejszych zmian wydaje się, że w Android Studio aplikacja testowa jest zintegrowana z projektem aplikacji.

Nie jestem pewien, czy to pomaga konkretnemu problemowi, ale znalazłem przewodnik dotyczący wykonywania testów z projektem Gradle. Android Gradle user Guide

35

Edycja: od 0.1.8 this is now supported in the IDE. Postępuj zgodnie z instrukcjami tam, zamiast korzystać z poniższych instrukcji.

W następstwie Android Gradle Plugin User Guide udało mi się dostać testy pracy w linii poleceń, wykonując następujące kroki na nowo utworzonym projekcie (użyłem domyślnego pakietu „com.example.myapplication”):

  1. dodatków katalogu src/instrumentTest/java do testów
  2. Dodaj klasę testową (rozciągający ActivityTestCase) w pakiecie com.example.myapplication.test
  3. rozpocząć wirtualne urządzenie
  4. w wierszu polecenia (w MyApplicationProject/MyApplic ation katalogu) użyj polecenia "../gradlew connectedInstrumentTest"

To uruchomiłem moje testy i umieściłem wyniki testu w MyApplicationProject/MyApplication/build/reports/instrumentTests/connected. Jestem nowy w testowaniu aplikacji na Androida, ale wygląda na to, że działa dobrze.

Z poziomu IDE można spróbować uruchomić tę samą klasę testową. Musisz

  1. aktualizacji build.gradle do listy Maven Central jako repo
  2. Aktualizacja build.gradle dodać JUnit 3.8 jako zależność instrumentTestCompile np instrumentTestCompile „JUnit: JUnit: 3.8”
  3. W „struktury projektu” ręcznie przenieść JUnit być pierwszym w kolejności zależności

Jednak to się nie powiedzie (ścieżka klasy używane podczas uruchamiania testów brakuje katalog wyjściowy test) . Jednak nie jestem pewien, czy to zadziała, ale rozumiem, że wymagany jest biegacz testowy dla Androida.

19

Proponuję użyć pliku gradle.build.

  1. Dodaj src/androidTest/JAVA katalog do testów (jak Chris zaczyna wyjaśniać)

  2. Otwarte gradle.build plik i podać tam:

    android { 
    
        compileSdkVersion rootProject.compileSdkVersion 
        buildToolsVersion rootProject.buildToolsVersion 
    
        sourceSets { 
    
         androidTest { 
          java.srcDirs = ['androidTest/java'] 
         } 
        } 
    } 
    
  3. Naciśnij "Projekt synchronizacji z plikiem Gradle" (u góry płyta). Powinieneś zobaczyć teraz folder "java" (wewnątrz "androidTest") ma kolor zielony.

  4. Teraz możesz tworzyć tam pliki testowe i wykonywać je.

+0

Nie zapomnij androidTest.setRoot ('instrumentTest') –

+3

W aktualnej wersji Android Studio nie jest konieczne, więcej - zastąp wszystko, co ma nazwa ** instrumentTest ** z ** androidTest ** –

+0

Nazwy "test przyrządów" i "androidTest" są całkowicie arbitralne, są tylko nazwami katalogów dla twojego projektu testowego, możesz równie dobrze utworzyć katalog testowy. , nazwa pakietu SDK w ramce testowania to android.test.InstrumentationTestCase, więc uważam, że "instrument" lub "instrumentacja" wciąż ma sens dla nazwania swoich testów. Patrz kod źródłowy: http://grepcode.com/file/ repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/test/InstrumentationTestCase.java#InstrumentationTestCase –

7

już teraz (studio 0.61) utrzymanie właściwej struktury projektu wystarczy. Nie trzeba tworzyć oddzielnego projektu testowego, jak w przypadku zaćmienia (patrz poniżej).

Tests structure

2

Android Studio został rodzaju ruchomy cel, pierwszym jest podgląd deweloper, a teraz jest w fazie beta. Ścieżka klas testowych w projekcie zmieniła się w czasie, ale niezależnie od wersji systemu AS ścieżka jest zadeklarowana w pliku .iml. Obecnie w wersji 0.8.3, znajdziesz następujące wewnątrz wewnętrznej pliku IML:

 <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/groovy" isTestSource="true" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> 
    <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> 

Plik .iml mówi ci, gdzie umieścić swoje klasy testowych.

2

Od wersji Android Studio 1.1 mamy oficjalną (eksperymentalną) obsługę pisania testów jednostek (Roboelectric działa również).

Źródło: https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support

+0

Wsparcie dla pisania testów Androida, właśnie zostało ulepszone, z nową biblioteką testów wsparcia. Możesz zobaczyć ciekawą prezentację tutaj: https: // docs.google.com/presentation/d/1EtFKPluGiuxZcr4W_cAziEY_--wbY_1otw44XEBv7JA/edit#slide=id.g98a986571_0_356 –

4

Android Studio utrzymuje się rozwija więc powyższe reakcje ostatecznie będzie już nie dotyczy. Dla bieżącej wersji Androida Studio 1.2.1.1, jest ładny samouczek na testach w:

http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-1/

+2

Tak, AS ewoluuje, więc jest raczej głupio, gdy ktoś tworzy artykuł o najnowocześniejszych technologiach i nigdy nie wspomina o numerze wersji dotyczy. jedyną wskazówką jest data na samym dole. – Tom

3

Najprostszym sposobem znalazłem jest usprawnione w my following blog post:

  1. Utwórz folder, w którym musisz napisać wszystkie testy jednostkowe (najlepiej com.example.app.tests)
  2. utworzyć nową klasę testową (korzystnie NameOfClassTestedTests, tj BankAccountLoginActivityTests)
  3. Extend InstrumentationTes tCase
  4. Napisz test uszkodzonej jednostki, aby upewnić się, że udało się skonfigurować testy jednostki.
  5. Należy pamiętać, że nazwa metody testu jednostkowego musi zaczynać się od słowa "test" (najlepiej testTestedMethodNameExpectedResult() i.e testBankAccountValidationFailedShouldLogout())
  6. Skonfiguruj swój projekt dla testów jednostkowych:
  7. Otwórz menu 'Uruchom ...' i kliknij 'Edytuj konfiguracje'
  8. Kliknij przycisk +
  9. Wybierz Android Testy szablon
  10. Wprowadź nazwę dla danej konfiguracji run (najlepiej „Testy AppName”)
  11. Wybierz swoją aplikację w combobox modułu
  12. Wybierz „wszystko w pakiecie” przełącznik (zazwyczaj tylko chcesz, aby wybrać tę opcję, ponieważ działa wszystko Testy jednostkowe we wszystkich klasach test)
  13. wpisać nazwę pakietu testu z etapu 1 (tj com.example.app.tests)
  14. Wybierz urządzenie, które chcesz uruchomić swoje testy na
  15. Zastosuj i zapisz konfiguracyjne
  16. testy jednostkowe Run (i oczekują awaria):
  17. Wybierz konfigurację nowo utworzonego Tests z menu Run
  18. Kliknij Uruchom i odczytać wyniki w konsoli wyjściowego

Życzymy powodzenia, dzięki czemu Twój kod stanie się czytelniejszy, łatwiejszy w utrzymaniu i przetestowany!

+0

Pytanie dotyczyło testów oprzyrządowania! Mam również trudności z napisaniem testu oprzyrządowania. Zobacz moje pytanie na http://stackoverflow.com/questions/35426990/no-error-still-android-studio-says-no-tests-were-found – Monica

0

Dodaj poniżej lib wewnątrz Gradle plik

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 

Tworzenie klasy HomeActivityTest wewnątrz katalogu androidTest i przed uruchomieniem testu dodać flurry_api_key i SENDER_ID ciąg wewnątrz pliku zasobów strun i zmienić wartość na porażki i sukcesy sprawy.

@RunWith(AndroidJUnit4.class) 
public class HomeActivityTest 
{ 
    private static final String SENDER_ID = "abc"; 
    private static final String RELEASE_FLURRY_API_KEY = "xyz"; 

    @Test 
    public void gcmRegistrationId_isCorrect() throws Exception 
    { 
     // Context of the app under test. 
     Context appContext = InstrumentationRegistry.getTargetContext(); 

     Assert.assertEquals(SENDER_ID, appContext.getString(R.string.sender_id)); 
    } 

    @Test 
    public void flurryApiKey_isCorrect() throws Exception 
    { 
     // Context of the app under test. 
     Context appContext = InstrumentationRegistry.getTargetContext(); 

     Assert.assertEquals(RELEASE_FLURRY_API_KEY, appContext.getString(R.string.flurry_api_key)); 
    } 
} 
16

Ta odpowiedź jest przeznaczona dla osób, które dopiero rozpoczynają testowanie Androida. Przedstawię dwa proste przykłady, które pomogą Ci zobaczyć, jak działają testy. Jeśli będziesz obserwować przez następne 10 minut, wszystko zostanie skonfigurowane, aby rozpocząć dodawanie testów do własnej aplikacji. Myślę, że będziesz zaskoczony, jak łatwo jest. Z pewnością byłam.

Wstęp do badań Android

Istnieją dwa różne rodzaje testów, które zrobisz.

  • Test jednostek lokalnych. Są one uruchamiane lokalnie na maszynie JVM (wirtualna maszyna Java). Ponieważ są one lokalne, są szybkie. Możesz ich użyć do przetestowania części kodu, które wymagają tylko Java, a nie interfejsów API Androida. (Czasami można zrobić fałszywy API obiektu do przetestowania więcej rzeczy na miejscu. To się nazywa mocking a. Mock Context jest przykładem).
  • oprzyrządowanego testy. Te testy są przeprowadzane na prawdziwym urządzeniu lub emulatorze. To sprawia, że ​​są wolniejsze niż testy lokalne. Są jednak bardziej elastyczne, ponieważ masz dostęp do pełnego interfejsu API systemu Android.

Utwórz nowy projekt, a zobaczysz następujące foldery domyślne.

enter image description here

Wszystko już jest i czeka na tworzenie testów. Wszystko już skonfigurowane!

Jak utworzyć jednostkę lokalną testuje

Otwórz plik ExampleUnitTest pokazany na powyższym zdjęciu. Powinien wyglądać mniej więcej tak:

public class ExampleUnitTest { 
    @Test 
    public void addition_isCorrect() throws Exception { 
     assertEquals(4, 2 + 2); 
    } 
} 

Naciśnij podwójną zieloną strzałkę, aby uruchomić wszystkie testy lub pojedynczą zieloną strzałkę, aby uruchomić tylko jedną. (W tym przypadku jest tylko jedno badanie, więc oba robią to samo.)

enter image description here

Należy zdać (o ile 2 + 2 wciąż 4 gdy czytasz tę odpowiedź). Gratulacje, właśnie przeprowadziłeś swój pierwszy test!

tworzyć własne testy

Napiszmy nasz własny test. Najpierw dodać tę klasę do głównego projektu aplikacji tak, że mamy coś do testu:

public class MyClass { 
    public int add(int a, int b) { 
     return a + b; 
    } 
} 

teraz zmienić metodę w klasie testowej addition_isCorrect() być jak poniższego kodu (lub po prostu dodać inną metodę pod inną nazwą) :

public class ExampleUnitTest { 
    @Test 
    public void addition_isCorrect() throws Exception { 
     MyClass myClass = new MyClass(); 
     int result = myClass.add(2, 2); 
     int expected = 4; 
     assertEquals(expected, result); 
    } 
} 

Uruchom ponownie, a powinieneś zobaczyć, jak mija. Gratulacje, właśnie stworzyłeś swój pierwszy test! (Cóż, myślę, że to technicznie kopalni, ale, hej, wystarczająco blisko. Co moje jest twoje.)

Jak stworzyć testy oprzyrządowanego

otworzyć plik ExampleInstrumentedTest. ponownie

@RunWith(AndroidJUnit4.class) 
public class ExampleInstrumentedTest { 
    @Test 
    public void useAppContext() throws Exception { 
     // Context of the app under test. 
     Context appContext = InstrumentationRegistry.getTargetContext(); 

     assertEquals("com.example.myapp", appContext.getPackageName()); 
    } 
} 

Naciśnij jeden z tych przycisków zielony: powinien wyglądać mniej więcej tak.

enter image description here

Dopóki masz prawdziwe urządzenie podłączone lub emulatora skonfigurować, należy zaczęli go i uruchomić aplikację. Gratulacje, właśnie wykonałeś swój pierwszy test instrumentalny!

tworzyć własne testy

oprzyrządowanego testy używać Espresso do uruchamiania testów. Jest to trochę jak twój mały robot, który może przetestować twoją aplikację. Możesz powiedzieć, aby zrobił coś takiego jak naciśnięcie przycisku lub odczytanie właściwości TextView.

Możesz napisać instrukcję, jak wykonać test ręcznie, ale ponieważ dopiero zaczynamy, użyjmy auto-record function. To bardzo proste.

Najpierw dodaj przycisk do interfejsu użytkownika, abyśmy mogli z nim pracować.Zrobiłem to:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.myapp.MainActivity"> 

    <Button 
     android:id="@+id/myButton" 
     android:text="Click me" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</android.support.constraint.ConstraintLayout> 

Następnie naciśnij Uruchom> Testuj Record Espresso w menu.

enter image description here

Po jego uruchomieniu, kliknij przycisk w emulatorze, a następnie wybrać przycisk OK, aby zakończyć w oknie dialogowym Record. Powinien automatycznie wygenerować następujący kod testowy.

@LargeTest 
@RunWith(AndroidJUnit4.class) 
public class MainActivityTest { 

    @Rule 
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class); 

    @Test 
    public void mainActivityTest() { 
     ViewInteraction appCompatButton = onView(
       allOf(withId(R.id.myButton), withText("Click me"), isDisplayed())); 
     appCompatButton.perform(click()); 
    } 
} 

Świetnie! Właśnie stworzyłeś pierwszy instrument testowy! To było bardzo łatwe. Prawdopodobnie powinieneś dodać stwierdzenie, aby uczynić go prawdziwym testem, ale to także całkiem łatwo zrobić z rejestratorem. Oglądaj this video, aby przejść nieco głębiej.

dalszych badań

będę oglądać filmy, a następnie zapoznać się z dokumentacją. To wszystko jest bardzo pomocne. Ostatni link to seria artykułów, które obejmują ważne rzeczy do przemyślenia przy wyborze tego, co należy przetestować.

+1

Świetna odpowiedź @Suragch. Szybkie pytanie: gdzie mam umieścić pliki wsparcia dla testu lokalnego? To jest hacky, ale z przyjemnością wstawię pełną ścieżkę z bazy testu, ale jeśli uruchomię w Android Studio, testy będą uruchamiane z _root_'/app', jednak jeśli uruchomię z linii poleceń Gradle (lub CI) to jest _root_. (Idealnie chciałbym uzyskać dostęp do określonych folderów 'asset' po uruchomieniu w dowolny sposób). – mm2001

+0

@ mm2001, Napisałem tę odpowiedź jako sposób, aby nauczyć się samemu testować, więc nie dotarłem nawet tak daleko jak ty. Jeśli zastanowisz się, zanim to zrobię, czy możesz zostawić komentarz? – Suragch

+0

Uważam, że jest to przydatne: http://stackoverflow.com/a/42751502/19506 - oznacza utworzenie folderu 'test/resources' i umieszczenie tam plików, np. 'test.txt' i uzyskaj do nich dostęp za pomocą' getClass(). getClassLoader(). getResource ("test.txt") '. Zdecydowałem, że bezpośredni dostęp do zasobów APK jest złym pomysłem, więc poradzę sobie z tym, kopiując pliki do przetestowania w kroku kompilacji lub w procesie aktualizacji zewnętrznej. Pozostało pewne pytanie dotyczące różnych wersji programu Gradle, ale jeszcze nie miałem z tym do czynienia. – mm2001

0

Android Studio v.2.3.3

Highlight kontekst kodu chcesz przetestować, a następnie za pomocą Skrót: CTRL + SHIFT + T

Użyj interfejsu dialogowego, aby dokończyć konfigurację.

Struktura testowania ma odzwierciedlać układ pakietu projektu w celu uzyskania najlepszych wyników, ale można ręcznie utworzyć testy niestandardowe, pod warunkiem, że masz poprawny katalog i ustawienia kompilacji.

Powiązane problemy