代码之家  ›  专栏  ›  技术社区  ›  Mikee

具有预期错误的单元测试

  •  2
  • Mikee  · 技术社区  · 14 年前

    为了我 ColorJizz 图书馆,我是 期望 在不同颜色格式之间进行多次转换时会出现轻微错误。误差都很小(即0.0001)。

    你觉得我该怎么办?

    我觉得有两个真正的选择:

    1. 保持原样,几乎30%的测试失败
    2. 在我的单元测试中放入某种“错误范围”,如果在这个范围内,就通过测试。但我该如何判断我应该拥有什么样的水平或错误呢?

    以下是我遇到的失败的例子:

    http://www.mikeefranklin.co.uk/tests/test/

    最好的解决方案是什么?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Mark Rushakoff    14 年前

    误差范围是浮点“相等”测试的标准方法。

    NUnit uses "within" :

    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
    

    大多数其他测试框架都有类似的东西。显然库尼特就是这样的人 有类似的东西,但很容易修改 the source 包括你的设计。

    至于要使用的实际增量,这取决于您的应用程序。我认为0.01实际上对人类视觉识别颜色差异有相当大的限制,但在数学上这是相当宽松的要求。

        2
  •  3
  •   Péter Török    14 年前

    似乎您使用的是浮点值,其中 rounding errors are a fact of life . 我建议在单元测试中应用比较检查的误差范围。

    即使某些单元测试失败也不是一个现实的选择- 在正常情况下,单元测试应通过100% . 如果让它们中的一些定期失败,那么当出现新的失败时,您就不会轻易注意到,这意味着代码中存在真正的错误。

        3
  •  1
  •   Yann Trevin    14 年前

    Gallio/MbUnit 对特定的测试用例有专门的断言( Assert.AreApproximatelyEqual )

    double a = 5;
    double b = 4.999;
    Assert.AreApproximatelyEqual(a, b, 0.001); // Pass!