gpt4 book ai didi

android - 使用 Mockk 模拟语言环境

转载 作者:行者123 更新时间:2023-12-03 13:27:40 31 4
gpt4 key购买 nike

我正在尝试使用 Mockk模拟对 Locale.getDefault() 的调用,但是我似乎无法让它工作。有没有人用过Mockk mock 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#setDefault 设置所需的语言环境。使用 Locale 类中预定义的国家/地区常量之一,或在构造函数中输入语言和国家/地区代码字符串:
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)
}

关于android - 使用 Mockk 模拟语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57521389/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com