我试图使用莫克来模拟对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发布于 2019-08-16 09:01:10
没有必要模拟区域设置,因为它是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)
}https://stackoverflow.com/questions/57521389
复制相似问题