2016-02-18 2 views
5

Я пытаюсь создать некоторые поддельные объекты на основе .json-файла. Таким образом, архитектура моего проекта выглядит следующим образом:Как читать json-файл из папки Asset при тестировании Espresso?

- MyProject 
- app 
---- src 
-------- androidTest 
------------ assets 
---------------- FirstObject.json 
---------------- SecondObject.json 
------------ java 
-------- main 
-------- test 

Я делаю тестирование с Espresso и имеют некоторые .json файлы в папке assets.

Мой тестовый класс выглядит следующим образом:

@RunWith(AndroidJUnit4.class) 
public class LocatingActivityTest 
{ 
    @Rule 
    public ActivityTestRule<BookingActivity> mActivityTestRule = new ActivityTestRule<>(BookingActivity.class); 

    private BookingActivity mBookingActivity; 

    @Before 
    public void setup() 
    { 
     mBookingActivity = mActivityTestRule.getActivity(); 
    } 

    @Test 
    public void viewsMustBeVisible() 
    { 
     onView(withId(R.id.fab_booking)).perform(click()); 
     onView(withId(R.id.booking_book_now)).check(matches(not(isEnabled()))); 

     mBookingActivity.setTestBooking(BookingTest.getStandardFlight(), 
       MyServiceProvider.getServices1(mBookingActivity), // <= Problem 
       true, 
       MyServiceProvider.getServices2(mBookingActivity), // <= Problem 
       MyServiceProvider.getServices3(mBookingActivity)); // <= Problem 

     onView(withId(R.id.booking_book_now)).check(matches(isEnabled())); 
     onView(withId(R.id.booking_book_now)).perform(click()); 

     onView(withId(R.id.text)).check(matches(isCompletelyDisplayed())); 
     onView(withId(R.id.sonarView)).check(matches(isCompletelyDisplayed())); 
     onView(withId(R.id.cancel_booking)).check(matches(isCompletelyDisplayed())); 
    } 
} 

Проблема заключается в моем MyServiceProvider классе:

public final class MyServiceProvider 
{ 
    public static List<FlightType> getServices1(Context context) 
    { 
     try 
     { 
      InputStream inputStream = context.getAssets().open("FlightTypes.json"); 
      String jsonString = read(inputStream); 
      Log.e("XXX", "getServices1() => " + jsonString); 
      Type listType = new TypeToken<List<FlightType>>(){}.getType(); 
      List<FlightType> flightTypeList = new Gson().fromJson(jsonString, listType); 

      return flightTypeList; 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    private static String read(InputStream inputStream) throws IOException 
    { 
     StringWriter writer = new StringWriter(); 
     IOUtils.copy(inputStream, writer, "UTF-8"); 
     return writer.toString(); 
    } 
. 
. 
. 
} 

По некоторым причинам InputStream inputStream = context.getAssets().open("FlightTypes.json"); не может открыть файл JSon и исключение бросков. Это мой лог:

02-17 21:00:58.984 5686-5706/com.xxx.xxx W/System.err: java.io.FileNotFoundException: FlightTypes.json 
02-17 21:00:58.984 5686-5706/com.xxx.xxx W/System.err:  at android.content.res.AssetManager.openAsset(Native Method) 
02-17 21:00:58.984 5686-5706/com.xxx.xxx W/System.err:  at android.content.res.AssetManager.open(AssetManager.java:313) 
02-17 21:00:58.984 5686-5706/com.xxx.xxx W/System.err:  at android.content.res.AssetManager.open(AssetManager.java:287) 
02-17 21:00:58.984 5686-5706/com.xxx.xxx W/System.err:  at com.xxx.xxx.utility.MyServiceProvider.getServices1(MyServiceProvider.java:31) 

Любое предложение будет оценено. Благодарю.

ответ

6

Не передавайте действие как контекст. Вместо этого передайте InstrumentationRegistry.getContext() и посмотрите, поможет ли это.

+0

Вы удивительный ... Я думал, моя деятельность может быть проблемой, но не знал, что его замена. Благодаря... – Hesam

0

Я сталкивался с таким же вопросом, и я нашел обходной путь

 boolean thrown = false; 
     try { 
      AssetManager assetManager = mainActivity.getResources().getAssets(); 
      InputStream inputStream = assetManager.open("/my/rep/file_name"); 
     } catch (FileNotFoundException e) { 
      thrown = true; 
      e.printStackTrace(); 
     } 
     assertFalse(thrown); 
Смежные вопросы