[英]Is java.util.Random really that random? How can I generate 52! (factorial) possible sequences?
[英]How can I mock a dependency of java.util.Random class?
假设在一个类中,我依赖于 java.util.Random 类。 由于 random 是一个具体的类并且没有接口支持,我如何模拟依赖? 我应该扩展随机类并覆盖方法。
我最初使用的是 Math.random() 但由于它是一个静态方法,我该怎么做才能模拟它? 如何模拟单元测试的静态方法。
不要直接使用java.util.Random class
,而是创建并调用您注入到类中的MyRandomUtility
类。
在这个类中,你只需要有一个包装java.util.Random class
class MyRandomUtility {
public Int getRandom(){
java.util.Random.nextInt().....
}
}
在您的main
类中,您可以包含MyRandomUtility
。
在测试中,您现在可以轻松模拟它。
您可以使用 PowerMockito。 它是 mockito 的扩展,它让你模拟静态方法。
https://www.baeldung.com/intro-to-powermock
public class CollaboratorWithStaticMethods {
public static String firstMethod(String name) {
return "Hello " + name + " !";
}
public static String secondMethod() {
return "Hello no one!";
}
public static String thirdMethod() {
return "Hello no one again!";
}
}
@Test
public void TestOne() {
mockStatic(CollaboratorWithStaticMethods.class);
when(CollaboratorWithStaticMethods.firstMethod(Mockito.anyString()))
.thenReturn("Hello Baeldung!");
}
示例来自链接。
嘲笑这样一个类的一个原因是测试,而不是嘲笑你让它每次都返回相同的“随机”值,这样你就可以在测试中断言可预测的结果。 您可以通过传递带有seed
的 Random 实例来实现这一点。
Random rand = new Random(1L);
System.out.println(rand.nextInt());
现在nextInt
每次运行时都会返回相同的数字
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.