对于我的ColorJizz库,当您在不同颜色格式之间进行多次转换时,我期待轻微错误。错误都非常小(即0.0001)。
您认为我应该怎么做?
我觉得有两个真正的选择:
以下是我遇到的一种失败的例子:
http://www.mikeefranklin.co.uk/tests/test/
什么是最好的解决方案?
答案 0 :(得分:3)
您似乎正在使用浮点值,rounding errors are a fact of life。我建议在单元测试中为比较检查应用误差范围。
即使您的某些单元测试失败也不是一个现实的选择 - 单元测试在正常情况下应该通过100%。如果你让其中一些经常失败,你就不会轻易注意到新的失败,这标志着代码中存在真正的错误。
答案 1 :(得分:2)
错误范围是浮点“相等”测试的标准方法。
Assert.That( 2.1 + 1.2, Is.EqualTo( 3.3 ).Within( .0005 );
Ruby's test/unit uses assert_in_delta
:
assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
大多数其他测试框架都有类似的东西。显然qunit是不有类似的东西,但是很容易修改the source以包含你的一个设计。
对于要使用的实际增量,它取决于您的应用程序。我认为0.01实际上对于人类在视觉上识别颜色差异具有相当大的限制性,但在数学上这将是一个相当宽松的要求。
答案 2 :(得分:1)
Gallio/MbUnit针对该特定测试用例(Assert.AreApproximatelyEqual
)提供专用断言
double a = 5;
double b = 4.999;
Assert.AreApproximatelyEqual(a, b, 0.001); // Pass!