【问题标题】:How to test for sometimes fails?如何测试有时会失败?
【发布时间】:2010-10-04 03:47:15
【问题描述】:

我正在尝试为一个模块编写一个单元测试,它会给我一个给定特定标准的随机数字列表。

我正在编写的特定测试是对原始序列的重新洗牌。我正在测试它

  • 序列长度相同
  • 序列具有相同的值
  • 序列的顺序不同

问题在于有时序列的顺序相同。处理这个问题的最佳方法是什么?

我正在使用 NUnit(但如果有帮助,可以使用其他测试框架)。

【问题讨论】:

    标签: .net unit-testing testing nunit random


    【解决方案1】:
    • 我正在编写的特定测试是对原始序列的重新洗牌。
    • 序列的顺序不同

    这些要求不匹配。如果你真的是随机改组,那么显然列表可以原样返回。

    虽然有一个选项。当你创建你的随机数生成器时,你可以传入一个“种子”。如果你总是传递相同的种子,你应该总是得到相同的答案。现在您已经从 random 函数中取出了随机数,您可以轻松地对其进行单元测试。

    【讨论】:

      【解决方案2】:

      您是如何生成随机数的?

      我将首先控制您的随机数生成器的种子,并将您的第三次测试重新定义为“当我们使用不同的种子时,序列的顺序不同”。

      【讨论】:

        【解决方案3】:

        什么是最好的处理方式 有这个吗?

        在要求确定之前,真的没有办法“处理它”。要么要求 shuffle 确保序列无序(在这种情况下,shuffle 不是真正的“随机”),要么它们的顺序相同。如果 shuffle 以相同的顺序返回某些东西是可以接受的,那么您可以编写一个测试来检查大量运行中结果的分布是否与预期的分布相比较,但这与测试“随机”所获得的一样具体“ 结果。如果 shuffle 不能返回相同的顺序,那么您可以多次运行该函数,以使您对 shuffle 不会返回相同的顺序有一个可接受的置信度,因此适用相同的一般原则。使用大量运行并根据可接受的公差测量结果。

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-19
          • 1970-01-01
          • 2021-01-06
          • 1970-01-01
          • 2023-02-06
          • 1970-01-01
          • 2015-11-15
          • 2017-10-04
          相关资源
          最近更新 更多