加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:03:20 所属栏目:Java 来源:网络整理
导读:我正在为自己在一个小型项目工作,我正在使用它作为一个机会了解单元测试和维护正确的文档. 我有一个甲板课程,代表一张卡片(这非常简单,老实说,我可以确定它没有单元测试,但是像我说我习惯使用单元测试),它有一种改变甲板上卡片顺序的洗牌()方法. 实施非常简
我正在为自己在一个小型项目工作,我正在使用它作为一个机会了解单元测试和维护正确的文档.

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

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

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

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

干杯,

皮特

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读