У меня есть часть кода, которая принимает контекст и передает этот контекст частному методу. Закрытый метод вызывает getAssets(). Open(), чтобы прочитать файл, присутствующий в папке с ресурсами моего приложения.Mocking Android AssetManager
public void methodA(Context ctx) throws IOException{
// do some stuff here...
Object data[] = getFileContents(ctx);
// use the data[] returned here...
}
private Object[] getFileContents(Context ctx) throws IOException{
Object[] data;
BufferedInputStream is = new BufferedInputStream(context.getAssets().open("test.txt"));
// parse file and create array of Objects[]
return data[];
}
Я пишу юнит-тесты, чтобы проверить Methoda() с помощью Mockito, так что я могу проверить передачу данных барахла или бросать исключения в моих testcases.
Проблема в том, что я не могу издеваться над классом AssetManager в android (он является окончательным).
Я попытался использовать InstrumentationTestCase для ввода реального и тестового контекста, но это работает только для нескольких сценариев. Как управлять BufferedInputStream, чтобы я мог предоставить ему любой вход, который я хочу (используя mocks или иначе)?