AndroidThree не работает в юнит-тесте без робоэлектрика? - PullRequest
1 голос
/ 25 марта 2019

У меня проблемы с созданием модульного теста без необходимости использования робототехники. Я использую AndroidThreeTen.init (this) в своем коде, и когда я запускаю свой тест, если я отключаю robolectric, я получаю ошибку: org.threeten.bp.zone.ZoneRulesException: No time-zone data files registered

и если я оставлю его включенным, я получу это: [Robolectric] com.mycomp.,yapp.utilities.log.LogTest.on Calling function w it returns an Int: sdk=28; resources=BINARY

Я пытался использовать testImplementation ‘com.jakewharton.threetenabp: threetenabp: 1.1.0’ не имеет значения. У меня есть AndroidThreeTen.init (это), вызванный в моем приложении и testApplication. есть идеи? это мой тест

@Test
    fun `on Calling function i it returns an Int`() {
        assertThat("Returned class is not an Int", Log.i("Test", "Test"), isA(Int::class.java))
        assertThat("Returned Int is not 0", Log.i("Test", "Test"), `is`(0))
    }

Или из-за этого я должен использовать робоэлектрик? (Примечание: журнал - это не util.log от Android, а мой собственный класс) (отредактировано)

1 Ответ

7 голосов
/ 25 марта 2019

Юнит-тесты JVM не работают во время выполнения Android. Вместо ThreeTenABP вы можете просто использовать ThreeTenBP напрямую, чтобы инициализировать тот же API для обычной JVM.

В моем проекте build.gradle я использую настройки вроде:

implementation "com.jakewharton.threetenabp:threetenabp:${threetenabpVersion}"
testImplementation("org.threeten:threetenbp:${threetenbpVersion}") {
    exclude module: "com.jakewharton.threetenabp:threetenabp:${threetenabpVersion}"
}

, где

threetenabpVersion = '1.2.0'
threetenbpVersion = '1.3.8'

Это обычно использует ThreeTenBP через ThreeTenABP, но в конфигурации модульного теста он добавляет TreeTenBP напрямую в качестве зависимости со своим кодом инициализации. Не могу точно вспомнить, почему я ввел правило exclude; так было уже несколько лет.

...