Как читать json-файл из папки Asset при тестировании Espresso?

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

- 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) 

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

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

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

  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);