2013-06-04 6 views
11

Nasza aplikacja na Androida wymaga automatycznego testowania, a nasza grupa korzysta z Robotium, aby obsłużyć to za nas. Nie stanowi to problemu dla testów jednostkowych, ale piszemy także zestaw kompleksowych testów integracyjnych, aby wykonywać nie tylko klienta przez serwery zaplecza. Mam kilka testów, które to robią, ale jeśli to możliwe, chciałbym je rozdzielić oddzielnie od testów jednostkowych, aby nasze ciągłe kompilacje integracyjne nie wymagały działania serwera na żywo w celu ukończenia.Jak przeprowadzić testowanie integracyjne na Androidzie dzięki nowemu systemowi Gradle Build?

Używamy nowego, błyszczącego systemu kompilacji Gradle. Zastanawiam się, czy mogę zrobić coś podobnego do smaku tylko testowego lub podprojektu, który zależy od rodzica APK, aby go uruchomić. Próbowałem wykonać tę pracę z oddzielnym projektem w całości przy użyciu instrukcji Robotium do testowania bezobsługowego pliku APK do debugowania, ale to nie zadziałało. Może dlatego, że byłem na prawdziwym sprzęcie, a nie na emulatorze. Nie miałem szczęścia w emulatorze, nawet przy zainstalowanym przyspieszeniu sprzętowym.

Jakaś rada, czy powinienem wstrzymać oddech i przetestować moje kompilacje, aby serwer integracyjny był dostępny, gdy budowane są kompilacje?

Odpowiedz

11

Zgodnie z ich Maven instructions wszystko, co musisz zrobić, to dodać robotium-solo jako zależność od kompilacji.

repositories { 
    mavenCentral() 
} 

dependencies { 
    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2' 
} 

Zapewni to, że masz plik robotium-solo.jar w ścieżce klas. Następnie zdefiniuj swoje testy w katalogu src/instrumentTest i uruchom gradle build. Sprawdź, czy to działa?

Pomogę, gdzie tylko mogę, ponieważ przeszliśmy z maven na rok wcześniej.

* EDIT PO chciała testy uruchomić oddzielnie od Gradle kompilacji, więc rozwiązanie jest, aby określić źródło niestandardowych ustawione tak:

sourceSets { 
    integrationTest { 
     // Gives you access to the compiled classes in your tests 
     compileClasspath += main.output 
     runtimeClasspath += main.output 
    } 
} 

dependencies { 
    integrationTestCompile 'com.jayway.android.robotium:robotium-solo:4.2' 
} 

// To run the tests: ./gradlew integrationTest 
task integrationTest(type: Test) { 
    testClassesDir = sourceSests.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
} 

Uwaga: Nie mam Android SDK instalowane na ten komputer. Jeśli nie działa main.output spróbuj z andriod.sourceSets.main.output i sprawdź, czy to działa.

+0

Mam to działa. To, czego chcę, to sposób na oddzielenie moich zależnych od serwera testów integracyjnych od testu niezależnego od serwera, aby Jenkins nie wymagał działającego serwera produktu do pracy. – Argyle

+0

Ah, rozumiem. W takim przypadku zajrzyj do tworzenia niestandardowego zestawu źródłowego w 'build.gradle' zwanego' testem integracji '. Będziesz wtedy miał dostęp do 'testu kompilacjiIutegrationTest 'w twoim zamknięciu zależności, w którym możesz dodać roboty. Dodaj zadanie do przeprowadzenia testów integracji. Określenie niestandardowej metody sourceSet 'gradle build' nie uruchomi ich domyślnie. Aby je uruchomić, musisz dodać niestandardowe zadanie. Poprawię moją odpowiedź z pewnym źródłem. – Joe

+3

Czy to nie byłby "instrumentTestCompile"? –

Powiązane problemy