gpt4 book ai didi

unit-testing - F# Assert.AreEquals 因两个文字而失败

转载 作者:行者123 更新时间:2023-12-04 05:04:04 25 4
gpt4 key购买 nike

我有以下单元测试:

open System
open System.Collections.Generic
open Microsoft.VisualStudio.TestTools.UnitTesting

[<TestClass>]
type Test_Spectra () =

let standard = new Standard1()

[<TestMethod>]
member x.LightTransmittance () =

let input = Test_Spectra.TestSprectra1
let expected = 0.32728222797751
let actual = standard.LightTransmittance(input)

Assert.AreEqual(expected, actual)

当我运行单元测试时它失败了,但是“预期”和“实际”的值是相等的:

lightTransmittanceFails

Expected 和 Actual 分别被推断为 float 和 double,但我的印象是 float 只是 double 的简写。对此有什么解释吗?

编辑根据@Gustavo 的评论,我将最后一行更改为:

Assert.AreEqual(expected, actual, 0.000000000000001)

测试通过。

最佳答案

浮点值的相等性很棘手,因为小的舍入差异就足以导致不等式。

当至少有一个数字来自计算时,使用相等来比较代码中的两个 float 通常不是一个好主意。这同样适用于单元测试。

您通常做的是定义您的容忍度并使用比较,而不是相等。

    let input = Test_Spectra.TestSprectra1
let expected = 0.32728222797751
let actual = standard.LightTransmittance(input)

let tolerance = 0.000000000000001

Assert.AreEqual(expected, actual, tolerance)

关于unit-testing - F# Assert.AreEquals 因两个文字而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142410/

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