【发布时间】:2011-02-25 16:36:59
【问题描述】:
我目前正在为自己做一个小项目,并以此为契机熟悉单元测试并维护适当的文档。
我有一个 Deck 类,它代表一副纸牌(它非常简单,老实说,我可以确定它在没有单元测试的情况下也能工作,但就像我说的那样,我已经习惯了使用单元测试),它有一个shuffle() 方法,可以改变牌组中卡片的顺序。
实现非常简单,肯定会奏效:
public void shuffle()
{
Collections.shuffle(this.cards);
}
但是,我怎样才能为这种方法实现单元测试。我的第一个想法是在调用shuffle() 后检查套牌的顶牌是否不同,但当然也有可能是相同的。我的第二个想法是检查卡片的整个顺序是否发生了变化,但它们可能再次处于相同的顺序。那么,我如何编写一个测试来确保该方法在所有情况下都有效?而且,一般来说,您如何对结果取决于某种随机性的方法进行单元测试?
干杯,
皮特
【问题讨论】:
-
从逻辑上讲,如果顺序保持不变,你的牌会被认为是洗牌吗?
-
关于您的最后一个问题,请参阅stackoverflow.com/questions/122741/…。我也认为 D. Knuth 有一个完整的章节。
-
我认为如果牌保持相同的顺序并且发生了一些重新排序,则认为牌组被洗牌是有意义的,尽管不太可能洗牌真正的牌组回到原来的顺序。
-
如果您的代码使用随机数生成器,请在单元测试中将其种子设置为固定值。这样你的套牌在你的测试中总是会以同样的方式洗牌。这可能需要更改 API 以使您的代码能够公开公开设置 rand 种子的方法,该方法可以在 JUnit 测试中设置
标签: java unit-testing junit random