2015-02-24 8 views
6

Próbuję przeprowadzić testy Robolectric i pracować nad naszym bieżącym projektem, nie mając przy tym szczęścia. Wolałbym je uruchomić w Androidzie 1.1.0 lub nowszym. To jest mój struktury projektu:Problemy z manifestowaniem i konfiguracją dotyczące pracy Robolectric z Androidem Studio 1.1.0

enter image description here

i tu jest moje testy:

import android.widget.Button; 

import com.mycompany.android.app.R; 

import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.robolectric.Robolectric; 
import org.robolectric.RobolectricTestRunner; 
import org.robolectric.annotation.Config; 

import static org.junit.Assert.assertNotNull; 

@Config(manifest = "AndroidManifest.xml") 
@RunWith(RobolectricTestRunner.class) 
public class SplashActivityTest { 

    private SplashActivity splashActivity; 

    @Before 
    public void setup() { 
     splashActivity = Robolectric.buildActivity(SplashActivity.class).create().start().resume().get(); 
    } 

    @Test 
    public void shouldNotBeNull() { 
     Button signUpButton = (Button) splashActivity.findViewById(R.id.sign_up_button); 
     assertNotNull(signUpButton); 

     Button loginButton = (Button) splashActivity.findViewById(R.id.login_button); 
     assertNotNull(loginButton); 
    } 

} 

Bez względu na to, co zrobić, aby spróbować i dostać ramy znaleźć testu zmieniając ścieżkę do manifestu , nie może go znaleźć - otrzymuję wiadomości WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. lub API Level XX is not supported - Sorry!. W końcu, myślę, że to jest powód Dostaję następujące błędy podczas testu zjazdowe:

android.content.res.Resources$NotFoundException: unknown resource 2130903074 

mam opcja eksperymentalna włączone, mają prawo wtyczki Gradle skonfigurowany (jednostkową testy pracę w porządku), ale nie jestem pewien, czego mi brakuje, aby uruchomić testy oprzyrządowania.

App-level plik build:

apply plugin: 'org.robolectric' 

testCompile 'junit:junit:4.12' 
testCompile 'org.mockito:mockito-core:1.9.5' 
testCompile 'org.robolectric:robolectric:2.4' 
testCompile 'org.hamcrest:hamcrest-core:1.1' 
testCompile 'org.hamcrest:hamcrest-library:1.1' 
testCompile 'org.hamcrest:hamcrest-integration:1.1' 

Top-level plik build:

dependencies { 
    classpath 'com.android.tools.build:gradle:1.1.0' 
    classpath 'org.robolectric:robolectric-gradle-plugin:1.0.0' 
} 
+0

Nie do końca pewien, czy mamy ten sam problem. Chciałem użyć Robolectric 2.4, ale to nie działało dobrze z Androidem 1.0. Na koniec wciąż używam Robolectric 2.3. –

Odpowiedz

10

napisałem krok po kroku, jak włączyć robolectric z Androidem studio 1.1.0 http://nenick-android.blogspot.de/2015/02/android-studio-110-beta-4-and.html Chyba znajdziesz odpowiedź na swój problem. A przykładem https://github.com/nenick/AndroidStudioAndRobolectric

+0

Dzięki za odpowiedź i artykuł. To zdecydowanie pomogło mi, a jednocześnie "nauczyło mnie łowić", jeśli chodzi o lepsze zrozumienie, jak to działa za kulisami. – TheIcemanCometh

2

W twoim przypadku następna zmiana może pomóc:

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18, reportSdk = 18) 

Ale również przeczytać @nenick kierować

+0

To zdecydowanie mnie zbliżyło - ścieżka i inne atrybuty na adnotacji zdecydowanie pomogły (teraz dostaję NPEs na czymś w zasobach). Niedługo przejdę przez przewodnik. – TheIcemanCometh

+0

Zakładam, że używasz aplikacji App compat. Sprawdź punkt pozycji menu cieni –

+0

Obecnie nie używamy żadnej z bibliotek AppCompat, ale jednym z problemów, które miałem, była definicja wersji Usług Google Play w manifeście. Dokumentacja od Google zawiera przykłady, w których ta wartość powinna być liczbą całkowitą, ale powoduje to, że klasa AndroidManifest w RE zgłasza NPE. Jeśli zmienię definicję wersji na ciąg, wydaje się, że tak jest. Dziwne. – TheIcemanCometh

0

Właśnie zmienił się:

@RunWith(RobolectricTestRunner.class) 

i to działa. Wszystkie inne pliki konfiguracyjne wydają się niepotrzebne.

2

Po kilku dniach walczą, I w końcu zorientowali się przyczynę zapytanie:

WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. messages, or API Level XX is not supported - Sorry! 

Wiele odpowiedzi znalazłem na StackOverflow powiedział mi, aby dodać ścieżkę pliku manifestu do @Config tak :

@Config(manifest = "src/main/AndroidManifest.xml") 

To nie działa dla jednego z moich projektów, ale kiedy otworzył nowy projekt i skonfigurować środowisko testowe, sam komunikat o błędzie pojawił się.

Powodem tego jest inny katalog roboczy twojego projektu. Najpierw powinieneś zlokalizować swój katalog roboczy, a następnie określić ścieżkę względną w swoim @Config (maniest = "...").

Gdzie mogę znaleźć katalog roboczy w Android Studio?

Run -> Edit Configurations -> Junit -> Your Test 
-> Configuration Tab -> **Working directory:** 

Weź mój katalog roboczy jako przykład, mój katalog roboczy jest

"/Users/Bible/AndroidstudioProjects/MVP" 

więc droga do mojego AndroidManifest.xml powinny być

@Config(manifest = "app/src/main/AndroidManifest.xml") 

Tutaj jesteś! Mam nadzieję, że ta odpowiedź może ułatwić Ci życie.

+0

W końcu rozwiązałem mój problem. "To zadziałało w przypadku jednego z moich projektów, ale kiedy otworzyłem nowy projekt i skonfigurowałem środowisko testowe, pojawił się ten sam komunikat o błędzie" => tak samo mi się stało –

+0

Nie znalazłem wcześniej Twojej odpowiedzi (może to być spowodowane twoja odpowiedź na dole). To zadziałało w przypadku jednego z moich projektów i odpowiedziałem tutaj: https://stackoverflow.com/a/45571884/4802664 Następnie utworzyłem nowy projekt i otrzymałem ten sam błąd (zajęło mi 3 dni na naprawę, trzeciego dnia dostałem Twoja odpowiedź).Teraz połączę twoją odpowiedź w mojej odpowiedzi. –

0

Jeśli używasz najnowszego Androida Studio (1.2.x), to lepiej użyj także RobolectricGradleTestRunner.class Został zaprojektowany dla różnych smaków i smaków testowych. Nie musisz również określać swojego manifestu źródłowego. Pobranie manifestu w oparciu o Twój smak kompilacji, z którego korzystasz. Jest to szczególnie przydatne, gdy masz różne środowiska kompilacji (przemieszczanie, produkcja) i chcesz uruchomić swoje przypadki testowe w określonym środowisku.

2

Napotkałem te same błędy. Używamy kilku smakach i buildtypes Tak, są kroki, aby to działa:

1) Android testy studio uruchomić konfigurację

Build Variants menu

Musisz ustawić katalogu roboczego do $ MODULE_DIR $ w Windows zbyt . Robolectric.org/getting-started/ powinien to powiedzieć.

Run Configuration Menu

2) testy jednostkowe powinny być opatrzone tak:

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject") 
public class SomeFragmentTest { 

Tutaj mamy zwykły odnośnik do pliku manifestu i packageName

Powiązane problemy