java - 测试产生随机结果的方法

标签 java random junit

我想测试这个方法:ArrayList<File> songs;

public void playRandomSong()
{
    Random random = new Random();
    int iNextSong = random.nextInt(songs.size());
    File songToPlay = songs.get(iNextSong);
    if (mediaPlayer != null && mediaPlayer.isPlaying())
        mediaPlayer.stop();
    mediaPlayer = new MediaPlayerImpl(songToPlay, new WhenDone());
    mediaPlayer.play();
    currentSong = songToPlay;
}

我是这样想的:多次运行该方法,看看它是否多次返回其中一个元素。但是我该如何用代码编写呢?

最佳答案

Random 不保证不会两次返回相同的值... 所以你不能测试“看看它是否多次返回一个元素”

如果您需要,您必须围绕Random 实现一个Set,但要注意生日悖论...

我认为您有 2 个选择:

1 :您可以尝试为您的Random 播种,这样您就可以预测序列...

2 : 删除 Random 并使用 [Collections.shuffle][1] 随机播放 arrayList

对于选项 1,您必须更改方法的签名。

使用选项 2,您还将每首歌曲播放一次。

关于java - 测试产生随机结果的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315437/

相关文章:

java - 导入和库相同吗?

Java消息队列抽象

c# - 随机具有特定数量的特定值

java - 如何在HTTP客户端apache上编写测试?

java - AspectJ 的 JUnit 测试

java - 如何在运行后将 swing 组件文本更新为不同的区域设置

java - 实现 'com.android.support:appcompat-v7:28.0.0-beta01' 显示错误

python - 在python中,如何生成一个范围内的随机整数,不包括列表中的某些数字?

python - 在 Python 2.7 中使用英特尔 RDRAND

java - 如何找到影响其他测试执行的测试?