如何模拟java.util.Random类的依赖关系?

如何模拟java.util.Random类的依赖关系?,java,unit-testing,Java,Unit Testing,假设在一个类中,我依赖于java.util.Random类。由于random是一个具体的类,没有接口支持,我如何模拟依赖关系?我应该扩展random类并重写这些方法吗 我最初使用的是Math.random(),但由于它是一个静态方法,我可以做些什么来模拟它?如何为单元测试模拟静态方法。不要直接使用java.util.Random类,而是创建并调用一个MyRandomUtility类,将其注入到类中 在这个类中,您只需要有一个方法来包装java.util.Random类 class MyRando

假设在一个类中,我依赖于java.util.Random类。由于random是一个具体的类,没有接口支持,我如何模拟依赖关系?我应该扩展random类并重写这些方法吗


我最初使用的是Math.random(),但由于它是一个静态方法,我可以做些什么来模拟它?如何为单元测试模拟静态方法。

不要直接使用
java.util.Random类
,而是创建并调用一个
MyRandomUtility
类,将其注入到类中

在这个类中,您只需要有一个方法来包装
java.util.Random类

class MyRandomUtility {

  public Int getRandom(){
      java.util.Random.nextInt().....
  }
}
main
类中,可以包含
MyRandomUtility


在测试中,您现在可以轻松地模拟它。

您可以使用PowerMockito。它是mockito的扩展,让您模拟静态方法


示例取自链接。

模拟此类类的原因是测试,与其模拟,不如让它每次返回相同的“随机”值,以便在测试中断言可预测的结果。您可以通过使用
种子传递随机实例来实现这一点

Random rand = new Random(1L);
System.out.println(rand.nextInt());
现在,
nextInt
将在每次运行时返回相同的数字

Random rand = new Random(1L);
System.out.println(rand.nextInt());