如何模拟java.util.Random类的依赖关系?
假设在一个类中,我依赖于java.util.Random类。由于random是一个具体的类,没有接口支持,我如何模拟依赖关系?我应该扩展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
我最初使用的是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());