2014-07-08 17 views
12

W moich testach robolektrycznych próbuję odczytać plik. Ponieważ ten plik zawiera tylko dane testowe, umieściłem je w zasobach testów.Używanie zasobów w testach robolowych

Struktura katalogów wygląda następująco.
src/main/assets/prod_data_file
src/test/assets/test_data_file

Jednak gdy próbuję odczytać pliku przez getShadowApplication().getAssets().open(MY_FILE_PATH) daje mi FileNotFoundException.

Czy ktoś wie, jak to naprawić?

+0

Musisz umieścić swój plik w folderze zasobów. Następnie użyj nazwy pliku dla 'InputStream is = getResources(). GetAssets(). Open (filename);'. – greenapps

+1

zasoby w katalogu testów? lub zasoby w katalogu aplikacji? – ankitrokdeonsns

+0

Hmmm? Niestety nie znam żadnego katalogu testowego w środowisku Eclipse. Nie jestem również świadomy katalogu aplikacji. Ment był katalogiem zasobów projektu. – greenapps

Odpowiedz

13

Ponieważ moje testy właśnie czytają te pliki i zwracają dane pliku jako String Udało mi się to zrobić poprzez getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH), a następnie odczytać plik. Naprawdę nie trzeba czytać, aby użyć getShadowApplication().getAssets().open(MY_FILE_PATH).

Właśnie przeniosłem moje pliki danych testowych do src/test/resources i zadziałało. :)

+0

Powodem, dla którego masz ten błąd, jest to, że zadania testowe (nie test androidTest) są używane do testów jednostkowych, a żadne zasoby nie są kopiowane do tych zadań (od maja 2015). Więc nawet jeśli AS ładnie podświetla folder zasobów w 'src/test', to nie ma żadnego znaczenia. Żaden pakiet APK nie jest zbudowany, więc zazwyczaj nie powinno być możliwości dostępu do zasobów, tylko że robolectric daje teraz taką możliwość. –

+0

Dzięki temu zaoszczędziło mi dzień –

+0

Świetne, dzięki! W ten sposób pliki są wykluczane z wydania apk lub pliku aar. –

0

udało mi się zrobić to tak:

1) kopię (lub utworzyć) AndroidManifest.xml w folderze testowym

2) Dodać @Config(emulateSdk = 18, manifest = "src/test/AndroidManifest.xml") dla tego konkretnego testu

udało mi się przeczytaj plik. Więc to znaczy można grać z AndroidManifest klasy i niestandardowego biegacza (więcej inspiracji tutaj https://groups.google.com/forum/#!topic/robolectric/YvbdqRFcdnA)

myślę, że może to być również możliwe, aby grać z build.gradle:

android { 
    sourceSets { 
    androidTest.setRoot('src/test') 

    androidTest { 
     assets.srcDir file('src/test/assets') 
    } 
    } 
} 

ale nie jestem pewien, ponieważ nie robi plugin nie tworzy żadnego wariantu budowy, ale tylko zadania.

Powiązane problemy