繁体   English   中英

如何在 Kotlin 中调用 assertEquals with Double Epsilon/Precision?

[英]How to call assertEquals with Double Epsilon/Precision in Kotlin?

我想知道,在 Kotlin 中,是否有可能调用与 java 方法等效的方法:

assertEquals(double expected, double actual, double precision)

因为每次我都得到这个方法

assertEquals(expected: T, actual: T, message: String)

而且我找不到带有精度参数的那个。 我想拨打 Java 也应该没问题。

我对该方法的调用:

assertEquals(5000.00, calculateCouponAmount(basicFaceValue, basicInterestRate, amortizationBullet, couponNumber1), 0.01)

我收到一个错误,因为 0.01 进入“消息”字段

我已经想通了!

这是怎么做的

import org.junit.*
import Kotlin.Test.assertEquals

Assert.assertEquals(expected, actual, precision) // to use the jUnit standard one
assertEquals(expected, actual, message) // to use the Kotlin one

我找不到,所以我创建了自己的一组函数:

import java.math.BigDecimal
import kotlin.math.abs
import kotlin.test.asserter

internal fun assertEquals(expected: Double, actual: Double?, epsilon: Double, message: String? = null) {
    asserter.assertNotNull(null, actual)
    asserter.assertTrue({ messagePrefix(message) + "Expected <$expected>, actual <$actual>, should differ no more than <$epsilon>." },
            abs(expected - actual!!) <= epsilon)
}

internal fun assertEquals(expected: BigDecimal, actual: BigDecimal?, epsilon: Double, message: String? = null) {
    asserter.assertNotNull(null, actual)
    asserter.assertTrue({ messagePrefix(message) + "Expected <$expected>, actual <$actual>, should differ no more than <$epsilon>." },
            (expected - actual!!).abs().toDouble() <= epsilon)
}

internal fun assertEquals(expected: Double, actual: BigDecimal?, epsilon: Double, message: String? = null) {
    asserter.assertNotNull(null, actual)
    asserter.assertTrue({ messagePrefix(message) + "Expected <$expected>, actual <$actual>, should differ no more than <$epsilon>." },
            abs(expected - actual!!.toDouble()) <= epsilon)
}

internal fun messagePrefix(message: String?) = if (message == null) "" else "$message. "

只需检查以确保您正在导入具有所需assertEquals方法的正确类。 除此之外,您可能想要验证calculateCouponAmount()方法是否返回Double

它现在包含在官方 API 中,用于 Double 和 Float:

fun assertEquals(
    expected: Double,
    actual: Double,
    absoluteTolerance: Double,
    message: String? = null
): Unit

fun assertEquals(
    expected: Float,
    actual: Float,
    absoluteTolerance: Float,
    message: String? = null
): Unit

参见https://kotlinlang.org/api/latest/kotlin.test/kotlin.test/assert-equals.html

暂无
暂无

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

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