java – 具有随机性质的JUnit测试方法

前端之家收集整理的这篇文章主要介绍了java – 具有随机性质的JUnit测试方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为自己在一个小型项目工作,我正在使用它作为一个机会了解单元测试和维护正确的文档.

我有一个甲板课程,代表一张卡片(这非常简单,老实说,我可以确定它没有单元测试,但是像我说我习惯使用单元测试),它有一种改变甲板上卡片顺序的洗牌()方法.

实施非常简单,一定会奏效:

public void shuffle()
{
    Collections.shuffle(this.cards);
}

但是,如何才能实现这种方法的单元测试.我的第一个想法是检查一下,在调用shuffle()之后,甲板上的顶卡是不同的,但是当然有可能是一样的.我的第二个想法是检查整个卡的顺序是否已经改变了,但是它们可能也是一样的.那么,我怎么能写一个测试,确保这种方法在所有情况下工作?而且,一般来说,你如何单位测试结果取决于一些随机性的方法

干杯,

皮特

解决方法

断言您的洗牌方法是否实际洗牌是非常困难的,如果不是不可能的话.默认随机生成器在一定程度上是随机的.测试你是否对这种随机性感到满意是不可能的,因为它需要太多的时间.你实际测试的是随机数发生器本身没有什么意义.

可以测试的是这个方法invariants.

>如果您退出方法,则甲板上应该有与您输入的牌数完全相同的牌.
>洗牌方法不应该引入重复.

你当然可以创建一个测试,检查在n个洗牌的顺序没有重复的甲板返回.但是有一段时间,这个测试可能会失败(不过不太可能,如其他答案中已经说过的).

需要考虑的其他事项是随机数发生器本身.如果这只是一个玩具项目,java.util.Random就足够了.如果您打算创建一些在线卡片游戏,请考虑使用java.security.SecureRandom.

猜你在找的Java相关文章