我有以下单元测试:
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)
Run Code Online (Sandbox Code Playgroud)
当我运行单元测试时它会失败,但是'expected'和'actual'的值是相等的:

预期和实际分别推断为浮动和双倍,但我认为浮动简单地说是双倍的简写.这有什么解释吗?
编辑 根据@ Gustavo的评论,我已将最后一行更改为:
Assert.AreEqual(expected, actual, 0.000000000000001)
Run Code Online (Sandbox Code Playgroud)
并且测试通过了.
浮点值的平等是棘手的,因为小的舍入差异将足以导致不等式.
当至少其中一个数字来自计算时,使用等式来比较代码中的两个浮点数通常是一个坏主意.这同样适用于单元测试.
你通常做的是定义什么是你的容忍度和使用比较,而不是平等.
let input = Test_Spectra.TestSprectra1
let expected = 0.32728222797751
let actual = standard.LightTransmittance(input)
let tolerance = 0.000000000000001
Assert.AreEqual(expected, actual, tolerance)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |