繁体   English   中英

使用 Mockk 模拟语言环境

[英]Mock Locale using Mockk

我正在尝试使用Mockk来模拟对Locale.getDefault()的调用,但是我似乎无法让它工作。 有没有人成功使用Mockk来模拟Locale

我非常简单的测试课

@Test
fun testName() {
    val defaultLocale = mockk<Locale>()

    mockkStatic(Locale::class)

    every { Locale.getDefault() } returns defaultLocale
}

我得到的错误

*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844

无需模拟 Locale,因为它是 Java 框架的一部分,并且可以在单元测试中正常运行。

package java.util.Locale.java

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

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 方法注释在类测试运行之前运行一次,在所有测试运行后运行一次。

private lateinit var storedLocale: Locale

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

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

@AfterClass
fun afterClass() {
     Locale.setDefault(storedLocale)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM