Mock FileInputStream за AndroidInstrumentation тест

Искам да прочета от файл в моя инструментален тест:

public class MyTest extends AndroidTestCase {

    @Override
    public void setUp() throws Exception {
        super.setUp();
        ...
    }
}

Опитах следните начини, но нито един от тях не беше успешен: InputStream inputStream = getContext().getAssets().open("myFile"); и File myFile = new File("src/androidTest/myFile");

Опитах да

Resources res = getContext().getResources();
InputStream in = res.openRawResource(R.raw.testfile)

което е предложено в Как да четем файл от директорията src/instrumentTest/resources в Android?, но нямам достъп до R.

Знаете ли как мога да го направя?

Искам да се подиграя на FileInputStream.

Добавки:

Намерих заобиколно решение за получаване на inputStream:

InputStream inputStream = getInstrumentation()
                .getContext()
                .getResources()
                .openRawResource(com.mypackage.instrumenttest.
                        R.raw.sifo_cookie_key_json);

Случаят е, че трябва да разширя InstrumentationTestCase, а не AndroidTestCase, за да имам достъп до R

Но това, от което се нуждая, е fileInputStream, а не inputStream, тъй като трябва да имам следното подигравателно връщане:

when(mockContext.openFileInput(FILE_NAME)).thenReturn(fileInputStream);

И openFileInput :http://developer.android.com/reference/android/content/Context.html#openFileInput(java.lang.String) връща fileInputStream

Направих заобиколно решение за конвертиране на InputStream във fileInputStream:

final File file = File.createTempFile("file", ".txt");
convertStreamToFile(inputStream, file);

FileInputStream fileInputStream = new FileInputStream(file);

Но това не е хубаво решение и се чудя дали мога да получа FileInputStream вместо InputStream?


person Ali    schedule 08.07.2015    source източник
comment
Опитвате ли се да прочетете истински файл или да създадете макет?   -  person Jeff Bowman    schedule 08.07.2015
comment
Истински файл, който поставих в папка raw под ресурси.   -  person Ali    schedule 09.07.2015
comment
В такъв случай ще искате да редактирате вашия въпрос и етикети, за да премахнете макет. Освен ако не искате фалшив обект без реални данни (или ограничени реални данни), подигравките и подигравателните рамки като Mockito не са от значение за вашия въпрос.   -  person Jeff Bowman    schedule 09.07.2015
comment
Тогава всъщност този въпрос решава ли проблема ви?   -  person Jeff Bowman    schedule 09.07.2015
comment
Ще го разгледам и ще ви уведомя. Благодаря за вашата помощ.   -  person Ali    schedule 09.07.2015
comment
@Jeff, опитах и ​​двете решения във връзката, но по някаква причина и двете се провалиха, но намерих друго решение, което добавих в Допълненията.   -  person Ali    schedule 10.07.2015
comment

Получих този проблем с проекта Yii 1.1.x и почти полудях:

Първо се уверете, че имате

sudo apt install php-xml php-mbstring php-pdo php-mysql 

инсталиран и рестартирайте apache

sudo apachectl restart

or:

sudo service apache2 restart

Подробна грешка беше, че библиотеката с база данни не може да бъде намерена.

Моето решение беше свързано с кеширане:

cache' => array(
    'class' => 'system.caching.CDbCache',
    //'class' => 'system.caching.CFileCache',
    'connectionID'=>'db', // <<< THIS IS THE ISSUE
),

ако ConnectionID не е зададен, db кеширането по подразбиране е към mysqli база данни в /protected/data директория, която не може да бъде достъпна, ако mysqli драйверът не е инсталиран в системата (често срещан проблем със специални сървъри, DO droplets, xampp/wamp...)

или можете да деактивирате db кеширането и вместо това да активирате fileCache.

  -  person Jared Burrows    schedule 10.07.2015
comment
@Jeff, оценявам, ако погледнеш добавките и ме уведоми, ако имаш някакво предложение.   -  person Ali    schedule 10.07.2015
comment
Да, направих го, но искам да тествам cookieManager и се сблъсквам с друг проблем в Robolectric framework, за който докладвах github.com/robolectric/robolectric/issues/1918 и изчакайте техния отговор. Вече се чакат 10 дни :)   -  person Ali    schedule 10.07.2015