测试使用随机值的类

Luk*_*uka 4 java junit

我需要测试一个使用random.nextDouble()的类是否有优雅的方式来提供测试这些数字,以便能够预见执行的输出?

omn*_*nom 8

我建议将随机数生成器嵌入到单独的组件中并将其注入到您的类中.因此,您可以在测试中注入其模拟实例.在我看来,这是最优雅的解决方案.您也可以使用反射做一些技巧并覆盖在类体内创建的随机生成器,但不建议这样做.


Ada*_*cin 6

是的,有:使用种子randoms.

您应该为您的类添加一个额外的包私有构造函数,允许该类为其随机取种子.在那个构造函数中,而不是写

random = new Random();
Run Code Online (Sandbox Code Playgroud)

random = new Random(seed);
Run Code Online (Sandbox Code Playgroud)

初始化私有字段random.通过使用种子创建Random,可以从种子初始化Random的内部状态.由于Random实际上不是随机的,而是伪随机数生成器,它将其下一个返回值基于当前状态,通过设置初始状态,您可以确定地设置一系列对Random调用返回的数字序列.

在您的测试代码中,Foo使用这个特殊的包 - 私有测试构造函数而不是默认构造函数初始化类型的新对象,并且每当您测试的类每次都获得相同的伪随机数序列时,只要传入相同的种子时间.