10 java random junit unit-testing
我现在正在为自己开展一个小项目,我正在利用它作为一个了解单元测试和维护适当文档的机会.
我有一个Deck代表一副牌的课(这很简单,说实话,我可以肯定它没有单元测试,但就像我说我已经习惯了使用单元测试)它有一个shuffle() 改变卡片中卡片顺序的方法.
实现非常简单,肯定会起作用:
public void shuffle()
{
Collections.shuffle(this.cards);
}
Run Code Online (Sandbox Code Playgroud)
但是,我怎么能为这个方法实现单元测试.我的第一个想法是在通话后检查牌组的顶牌是否有所不同,shuffle()但当然有可能是相同的.我的第二个想法是检查整个卡的顺序是否已经改变,但它们可能也是相同的顺序.那么,我怎么能编写一个测试来确保这种方法适用于所有情况呢?而且,一般来说,如何对结果取决于某些随机性的单元测试方法进行单元化?
干杯,
皮特
如果不是不可能的话,断言你的随机播放方法是否真的洗牌.默认随机数生成器只是随机到一定程度.测试你是否对这种随机性感到满意是不可能的,因为这需要花费太多时间.您实际测试的是随机数生成器本身,它没有多大意义.
但是你可以测试的是这种方法的不变量.
您当然可以创建一个测试,检查在一系列nshuffle中是否没有返回重复的deck.但偶尔这个测试可能会失败(但不太可能,正如其他答案中已经说过的那样).
要考虑的其他因素是随机数生成器本身.如果这只是一个玩具项目,java.util.Random就足够了.如果您打算创建一些在线纸牌游戏,请考虑使用java.security.SecureRandom.