Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对';随机';选择一个值?_Java_Unit Testing_Random_Junit - Fatal编程技术网

Java 如何对';随机';选择一个值?

Java 如何对';随机';选择一个值?,java,unit-testing,random,junit,Java,Unit Testing,Random,Junit,我有一个函数,它期望从一组值中随机返回一个值。有没有一种很好的方法可以使用JUnit等单元测试工具来测试这种随机行为?没有。根据定义,结果是(或应该是)不确定的,所以通常的“预期结果”概念不适用 然而,您可以使用统计方法编写一个相当简单的测试,也许当调用n次时,返回的值集(唯一)至少为.75n或类似的值 另一种方法可能是将“随机性”推迟到可信且充分的实现,例如基于Math.random()的算法,这意味着您的单元测试不必测试随机性,而只需测试功能性。否。根据定义,结果是(或应该是)不确定的,因此

我有一个函数,它期望从一组值中随机返回一个值。有没有一种很好的方法可以使用JUnit等单元测试工具来测试这种随机行为?

没有。根据定义,结果是(或应该是)不确定的,所以通常的“预期结果”概念不适用

然而,您可以使用统计方法编写一个相当简单的测试,也许当调用n次时,返回的值集(唯一)至少为.75n或类似的值


另一种方法可能是将“随机性”推迟到可信且充分的实现,例如基于
Math.random()
的算法,这意味着您的单元测试不必测试随机性,而只需测试功能性。

否。根据定义,结果是(或应该是)不确定的,因此“预期结果”不适用

然而,您可以使用统计方法编写一个相当简单的测试,也许当调用n次时,返回的值集(唯一)至少为.75n或类似的值


另一种方法可能是将“随机性”推迟到可信且充分的实现,例如基于
Math.random()的算法
,这意味着您的单元测试不必测试随机性,而只需测试功能性。

在需要对通常随机行为的代码进行大量单元测试的情况下,我有时会将
java.util.Random
的结果流包装在
Iterable
中ng,我可以用
ArrayList
调用相同的方法,并获得完全可预测的行为。

在需要对通常随机行为的代码进行大量单元测试的情况下,我有时会将
java.util.Random
的结果流包装在
Iterable
中。优点是,在单元测试期间我可以用
ArrayList调用相同的方法,得到完全可预测的行为。

测试随机值的标准方法是生成几千个随机值,枚举每个随机值的数量,计算数据集的卡方统计,然后不完全伽马函数将给出随机发生的at分布。如果概率太接近于0,则可能是您的RNG有偏差


这方面的经典例子是“死硬汉”“测试套件。您还可以在my中查看测试代码http://github.com/lcrocker/ojrandlib.测试随机值的标准方法是生成几千个随机值,列举每个随机值的数量,计算数据集的卡方统计量,然后,不完全伽马函数将给出该分布随机发生的概率。如果该概率太接近于0,则可能是您的RNG有偏差


这方面的经典例子是“Diehard”测试套件。您还可以在my中查看测试代码http://github.com/lcrocker/ojrandlib.

java.util.Random对于您的目的来说可能是“足够随机的”,因此我假设您尝试测试的是在集合中的项目之间获得适当的随机分布。的确,有许多方法可以根据随机数从集合中选择一个项目,但最终仍然会使结果产生偏差。例如,在集合中迭代并在每个阶段使用随机检查将偏向列表中较早的项


如果你想测试你的函数是否真的产生随机结果,你需要找到一个统计分析工具包,它可以做到这一点。我建议您使用整数序列填充各种大小的集合,然后针对这些集合运行随机获取代码的测试。您可以将获取的值输入到统计分析中,以确定它们是随机的还是有偏差的,并且由于它们是线性序列,因此结果应该暗示整个获取代码具有相同的属性。

java.util.random对于您的目的来说可能是“足够随机的”,因此,我假设您要测试的是,在您的集合中的项目之间获得适当的随机分布。的确,有许多方法可以根据随机数从集合中选择一个项目,但最终仍然会使结果产生偏差。例如,在集合中迭代并在每个阶段使用随机检查将偏向列表中较早的项


如果你想测试你的函数是否真的产生随机结果,你需要找到一个统计分析工具包,它可以做到这一点。我建议您使用整数序列填充各种大小的集合,然后针对这些集合运行随机获取代码的测试。您可以将获取的值输入到统计分析中,以确定它们是随机的还是有偏差的,并且由于它们是线性序列,因此结果应该暗示整个获取代码具有相同的属性。

单元测试:定义输入集,传递到函数,检查输入集中的返回值=乐趣和利润。@MitchWheat很抱歉没有清楚地描述问题,该问题已被编辑,感谢您的友好评论:-)Dup?单元测试可能重复:定义输入集,传递给函数,检查输入集中的返回值=乐趣和利润。@MitchWheat很抱歉没有清楚地描述问题,问题已被编辑,感谢您的友好评论:-)Dup?可能的重复是最好的方法。单元测试不应该测试
java.util.Random
,这是最好的方法。单元测试不应该测试
java.util.Random
的随机性。