Как инициализировать бэкпорт ThreeTen Android в модульном тесте - PullRequest
0 голосов
/ 05 февраля 2019

Я использую эту библиотеку для хранения данных о дате и времени в моем приложении.Когда приложение запускается, AndroidThreeTen инициализируется первым для правильной работы.Поэтому я хочу спросить, как его инициализировать при модульном тестировании?Например, я хочу проверить, используя LocalDate, LocalDateTime и т. Д.

Мой текущий способ такой:

class OverviewViewModelTest {

    @Rule
    @JvmField
    val rule = InstantTaskExecutorRule()

    @Before
    fun setup() {
        AndroidThreeTen.init(Application())
    }

    //...
}

Но выдает эту ошибку:

java.lang.ExceptionInInitializerError
    at org.threeten.bp.ZoneRegion.ofId(ZoneRegion.java:143)
    at org.threeten.bp.ZoneId.of(ZoneId.java:358)
    at org.threeten.bp.ZoneId.of(ZoneId.java:286)
    at org.threeten.bp.ZoneId.systemDefault(ZoneId.java:245)
    at org.threeten.bp.Clock.systemDefaultZone(Clock.java:137)
    at org.threeten.bp.LocalDate.now(LocalDate.java:165)
Caused by: java.lang.RuntimeException: Method getAssets in android.content.ContextWrapper not mocked. See http://g.co/androidstudio/not-mocked for details.
    at android.content.ContextWrapper.getAssets(ContextWrapper.java)
    at com.jakewharton.threetenabp.AssetsZoneRulesInitializer.initializeProviders(AssetsZoneRulesInitializer.java:22)
    at org.threeten.bp.zone.ZoneRulesInitializer.initialize(ZoneRulesInitializer.java:89)
    at org.threeten.bp.zone.ZoneRulesProvider.<clinit>(ZoneRulesProvider.java:82)
    ... 32 more

Так как мне заставить эту библиотеку работать в модульных тестах?

1 Ответ

0 голосов
/ 15 февраля 2019

Используя последний комментарий к выпуску GitHub , я смог запустить бэкпорт Three Ten Android с помощью библиотеки Robolectric.Для пользователей Kotlin не используйте последний класс.Вместо этого используйте класс open .

В build.gradle вашего приложения добавьте:

dependencies {
    // ...
    testImplementation('org.threeten:threetenbp:1.3.8') {
        exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
    }
}

и используйте этот шаблон для написания тестов с использованием ThreeTenABP:

@RunWith(RobolectricTestRunner::class)
open class DateUtilTest {

    @Test
    fun testName {
        // Write as normal
    }
}
...