我在Android工作室做了一个教程的测试,测试结果显示:

expected:<2,00[ ]$> but was:<2,00[ ]$>
Expected :2,00 $
Actual   :2,00 $

我有点糊涂了!两者都是相同的字符串...

编辑:

这是我正在测试的方法

@VisibleForTesting
internal fun calculateTip(
    amount: Double, percent: Double = 15.0, roundUp: Boolean): String{

    var tip = percent / 100 * amount
    if (roundUp)
        tip = kotlin.math.ceil(tip)
    return NumberFormat.getCurrencyInstance().format(tip)
}

这是测试断言:

@Test
    fun calculate_20_percent_tip_no_roundup() {
        val amount = 10.00
        val tipPercent = 20.00
        val expectedTip = "2,00 $"
        val actualTip = calculateTip(amount = amount, percent = tipPercent, false)
        assertEquals(expectedTip, actualTip)

    }

推荐答案

增加这一点是为了阐明这一区别.

为了重新创建,我必须使用区域设置

java.text.NumberFormat.getCurrencyInstance( Locale("fr", "CA" )).format(2.00)

在测试的运行日志(log)中,它将显示:

enter image description here

如果你点击Click to see difference,它会显示:

enter image description here

因此,该特定区域货币的NumberFormat引入了NBSP.不幸的是,无法解释why它会这么做.

MFP:

@Test
fun test_currencyComparison() {
    val expected = "2,00 $"
    val actual = java.text.NumberFormat.getCurrencyInstance( Locale("fr", "CA" )).format(2.00)
    println("$expected $actual")
    assertEquals(expected, actual)
}

在您的情况下,克服这一问题的一种方法是使用相同的NumberFormat来生成预期的:

@Test
fun calculate_20_percent_tip_no_roundup() {
    val amount = 10.00
    val tipPercent = 20.00
    val expectedTip = java.text.NumberFormat.getCurrencyInstance().format(2.00)
    val actualTip = calculateTip(amount = amount, percent = tipPercent, false)
    assertEquals(expectedTip, actualTip)

}

Android相关问答推荐

约束布局:垂直链中的视图应将内容包裹到空间的1/3

这款应用与最新版本的Android不兼容.在Android 14中

Android:微调:在代码中设置ArrayAdapter不希望调用On ItemSelected,仅当用户单击微调时调用

Android布局渲染问题

从包含的(复合)模块导入 Kotlin 类时,Android 应用程序模块的 build.gradle.kts 未解决的引用错误

Android 不在后台更新位置

如何在C++中使用JNI_GetCreatedJavaVMs调用Java代码

Jetpack Compose - 在屏幕外偏移绘制形状并使用非常大的尺寸

在模块 jetified-kotlin-stdlib-1.8.10 中发现重复的类 kotlin.random.jdk8,带有启动基准

在Android RoomDB中使用Kotlin Flow和删除数据时如何解决错误?

如果 auth 失败,如何显示 toast jetpack compose firebase if else @Composable 调用只能在 @Composable 函数的上下文中发生

如何像 XML 一样在 Compose Android Studio 中折叠/展开小部件代码区域/区域

Android Studio xml 预览问题无法初始化编辑器

将应用更改为暗模式后 Android MainActivity 数据泄漏

Unity:Android 上随机接近零的 FPS 下降(提供了很多线索)

在 Kotlin 客户端应用程序中发送 FCM 推送通知 - Firebase 云消息传递

MVVM - 这个逻辑的最佳层是什么?

Android Compose webview 被拉伸

基线配置文件 x R8/Proguard

单个用户可以在 Firebase 身份验证中将多个电话号码链接到他的帐户吗?