首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mockk模拟区域设置

使用Mockk模拟区域设置
EN

Stack Overflow用户
提问于 2019-08-16 08:37:01
回答 1查看 2.7K关注 0票数 12

我试图使用莫克来模拟对Locale.getDefault()的调用,但是我似乎无法让它正常工作。是否有人成功地使用Mockk来模拟Locale

我非常简单的考试课

代码语言:javascript
复制
@Test
fun testName() {
    val defaultLocale = mockk<Locale>()

    mockkStatic(Locale::class)

    every { Locale.getDefault() } returns defaultLocale
}

我所犯的错误

代码语言:javascript
复制
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 09:01:10

没有必要模拟区域设置,因为它是Java框架的一部分,并且将在单元测试中运行,而不会出现问题。

代码语言:javascript
复制
package java.util.Locale.java

如果您正在测试各种区域设置,则可以在每个测试运行之前通过使用locale类中预定义的国家常量之一调用Locale#setDefault,或者在构造函数中输入语言和国家代码字符串:

代码语言:javascript
复制
setDefault(Locale.US) 
setDefault(Locale.GERMANY)
setDefault(Locale.FRANCE)

// with a language code
val locale = Locale("en-US")

// with a language and country code
val locale = Locale("en", "US") 

Locale.setDefault(locale)

重要

在每个测试类完成后,您应该重置区域设置,以确保区域设置在即将运行的下一个测试中处于预期状态。这可以通过存储类进入的区域设置并在所有测试运行后恢复到它来维护,@BeforeClass@AfterClass JUnit方法注释在类测试运行之前运行一次,在所有测试运行之后运行一次。

代码语言:javascript
复制
private lateinit var storedLocale: Locale

@BeforeClass
fun beforeClass() {
    storedLocale = Locale.getDefault()
}

..
// various tests that manipulate the default locale
..

@AfterClass
fun afterClass() {
     Locale.setDefault(storedLocale)
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57521389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档