2015-03-04 2 views
0

Я пытаюсь протестировать код, который делает вызов context.getResources().openRawResource(rawResourceId) (docs), где ресурс является текстовым файлом, который нужно читать.Android: mock Resources.openRawResource (int)

Мой класс испытаний распространяется на AndroidTestCase.

Как я могу издеваться над этим вызовом, чтобы вернуть содержимое файла, которое я хочу?

+0

Вы используете новую поддержку модуля тестирования? Вы используете Robolectric? – Emmanuel

+0

@ Emmanuel жаль, что я должен был быть более конкретным, мой тестовый класс расширяет AndroidTestCase – Pete

ответ

1

Предполагая, что вы можете установить Context кода, который вы тестируете, вы можете сделать это, создав следующие два класса (я стараюсь сделать их частными классами в своем тестовом классе, потому что они содержат тестовую информацию):

private class mMockContext extends MockContext { 

    @Override 
    public Resources getResources() { 
     return new mMockResources(); 
    } 
} 

private class mMockResources extends MockResources { 

    @Override 
    public InputStream openRawResource(int id) { 
     String fileContents = "line one\n" + 
     "line two\n" + 
     "line three"; 

     return new ByteArrayInputStream(fileContents.getBytes()); 
    } 
} 

Затем, когда вы создаете свой класс для тестирования, передать ему mMockContext класс вместо Context.

+0

Спасибо, попробует. – Pete

+0

Это будет сделано. Благодаря! – Pete