当前位置: 首页 > 知识库问答 >
问题:

如何在单元测试中初始化ThreeTen Android后端口

澹台昆
2023-03-14
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个答案

阙阳
2023-03-14

使用GitHub问题上的最新评论,我能够使用Robolectric库运行Three Ten Android后端口。对于Kotlin用户,不要使用final类。相反,使用公开类。

在应用程序的build.gradle中,添加:

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

并使用此模板编写使用三个treetenabp的测试

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

    @Test
    fun testName {
        // Write as normal
    }
}
 类似资料:
  • 我有一个例子,我有一个注释类,它创建一个bean并调用一些代码。我已经启用了急切的单例初始化,并且调用了bean工厂方法,即使在应用程序启动时它没有在任何地方使用。但是,对于测试,即时初始化不起作用,并且不创建bean: 应用程序: 配置 以及测试: 因此,在执行测试时,不会调用来自类的方法,即使启用了,并且它在应用程序正常启动时工作。 问题是:如何为micronaut测试启用热切的单例初始化?

  • 问题内容: 如何在Java中初始化? 我知道这是一个接口,可以使用或实现,但是在初始化时会出现错误的不兼容类型: 那我该如何进行呢? 问题答案: 用 或从Java 1.7开始

  • 问题内容: 我无法按照以下代码初始化列表: 我遇到以下错误: 无法实例化类型 我该如何实例化? 问题答案: 如果你检查API,则会注意到它说: 作为一种手段,它无法实例化(不可能)。 如果你检查该链接,则会发现一些实现的: 所有已知的实施类: 那些可以实例化。使用它们的链接来了解有关它们的更多信息,即IE:知道哪个更适合你的需求。 三种最常用的可能是: 奖励: 你还可以使用,以更简单的方式使用值实

  • 问题内容: 我正在跟踪Swift和Objective-C Runtime,它适用于常规方法。 我喜欢使用init方法,据我了解,init就像一个类方法。因此,我尝试将初始化作为实例和类方法。但这似乎不起作用 我可以使用Objective C使其工作,只是想知道如何在Swift中使其工作 摘录自我的要旨 问题答案: 为方法创建选择器时,应使用Obj C方法签名作为选择器的基础,因为使用Obj C运行

  • 我们的使用和配置基于https://github.com/hdineth/springboot-freemaker-email-send: 但是,任何地方都没有关于如何使用JUnit5为此运行单元测试的信息或文档。 当我添加相关的依赖项时 在我们的实际代码中(这是一个大的多模块项目),我有另一个错误,原因是: 但这只是为了上下文,首先我想让它在简单的示例项目中工作,然后担心让它在复杂的项目中工作。

  • Junit4中是否有方法将一些预初始化的数据(如http连接)传递给所有子(即套件)测试类,这些数据是使用带有“@RunWith(Suite.class)”注释的类中的“@ClassRule”初始化的?还有,如何确保套件中的类不能单独运行? 例如 谢谢, 帕迪