MalformedJsonException выдается только во время юнит-тестов на эмуляторе Android

У меня есть набор тестов, которые открывают файлы JSON. Тесты не проходят на эмуляторе <= API 23 и отлично работают на более новом уровне API.

Есть два разных типа исключений:

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated string at line 1 column 1025 $.ajsonelement

а также

com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 1025 path $.ajsonelement,

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

Я использую gson, но проблема также появляется с Моши.

1 ответ

Нашел проблему. Файлы JSON были в moduleName/src/test/resources/configs/, Я переместил их в moduleName/src/test/assets/configs/

Код для их загрузки был:

val assetConfig = InstrumentationRegistry 
            .getInstrumentation() 
            .context 
            .assets 
            .open(configFileName) 
val scanner = Scanner(assetConfig) 
return scanner.useDelimiter("\\Z").next() Charsets.UTF_8)) 

Я заменил его помощником по Guava:

val assetConfig = InstrumentationRegistry
            .getInstrumentation()
            .context
            .assets
            .open(configFileName)
return CharStreams.toString(InputStreamReader(assetConfig, Charsets.UTF_8))

Все отлично загружается для всех эмуляторов между API 18 и 26.

Другие вопросы по тегам