android - 使用 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#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)
}
推荐阅读
- css - CSS 在部署到 Google Cloud Run 的 Laravel 项目中不起作用
- c# - 带参数的 Powershell 反射调用
- npm - TypeError:没有'new'就不能调用类构造函数{class}
- r - 无法创建将 R 连接到 Twitter 的令牌
- django - 使用 Django 在 Google 图表表中传递元组
- c# - 我需要帮助让这把石头剪刀布随机
- swiftui - 从 UIKit 更新 @State var
- java - 飞碟:rowsapn 和 page-break-inside
- android - 我的 GestureDetector 中的“上下文”有问题吗?
- c - 带有 SNDRV_PCM_IOCTL_WRITEI_FRAMES 的 ALSA 断管