java – 具有随机性质的JUnit测试方法
我正在为自己在一个小型项目工作,我正在使用它作为一个机会了解单元测试和维护正确的文档.
我有一个甲板课程,代表一张卡片(这非常简单,老实说,我可以确定它没有单元测试,但是像我说我习惯使用单元测试),它有一种改变甲板上卡片顺序的洗牌()方法. 实施非常简单,一定会奏效: public void shuffle() { Collections.shuffle(this.cards); } 但是,如何才能实现这种方法的单元测试.我的第一个想法是检查一下,在调用shuffle()之后,甲板上的顶卡是不同的,但是当然有可能是一样的.我的第二个想法是检查整个卡的顺序是否已经改变了,但是它们可能也是一样的.那么,我怎么能写一个测试,确保这种方法在所有情况下工作?而且,一般来说,你如何单位测试结果取决于一些随机性的方法? 干杯, 皮特 解决方法
断言您的洗牌方法是否实际洗牌是非常困难的,如果不是不可能的话.默认随机数生成器在一定程度上是随机的.测试你是否对这种随机性感到满意是不可能的,因为它需要太多的时间.你实际测试的是随机数发生器本身没有什么意义.
可以测试的是这个方法的invariants. >如果您退出该方法,则甲板上应该有与您输入的牌数完全相同的牌. 你当然可以创建一个测试,检查在n个洗牌的顺序没有重复的甲板返回.但是有一段时间,这个测试可能会失败(不过不太可能,如其他答案中已经说过的). 需要考虑的其他事项是随机数发生器本身.如果这只是一个玩具项目,java.util.Random就足够了.如果您打算创建一些在线卡片游戏,请考虑使用java.security.SecureRandom. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |