Junit 在Mockito中是否可以不使用powermock模拟UUID?

Junit 在Mockito中是否可以不使用powermock模拟UUID?,junit,mockito,powermock,Junit,Mockito,Powermock,我想模拟具有uuid值的对象,但我不想安装powermock。实现这一点的最简单方法是结束uuid生成 假设您有一个使用UUID.randomUUID public Clazz MyClazz{ public void doSomething(){ UUID uuid = UUID.randomUUID(); } } UUID基因与JDK实现完全相关。一个解决方案是包装UUID生成,该生成可以在测试时用不同的依赖项替换 Spring提供了一个接口来支持这个senario 我不是建议

我想模拟具有uuid值的对象,但我不想安装powermock。

实现这一点的最简单方法是结束uuid生成

假设您有一个使用
UUID.randomUUID

public Clazz MyClazz{

public void doSomething(){
    UUID uuid = UUID.randomUUID();
}

}
UUID基因与JDK实现完全相关。一个解决方案是包装UUID生成,该生成可以在测试时用不同的依赖项替换

Spring提供了一个接口来支持这个senario

我不是建议您将Spring用于此接口,只是出于信息目的

然后可以结束UUID生成

public class MyClazz{

private final idGeneartor;

public MyClazz(IdGeneartor idGenerator){
    this.idGenerator = idGenerator;
}

public void doSomething(){
    UUID uuid =idGenerator.generateId();
}
然后,根据需要,您可以有多个UUID geneartion实现

public JDKIdGeneartor implements IdGenerator(){

    public UUID generateId(){
       return UUID.randomUUID();
    }
}
和一个硬编码的impl,它总是返回相同的UUID

public HardCodedIdGenerator implements IdGenerator(){

    public UUID generateId(){
       return UUID.nameUUIDFromBytes("hardcoded".getBytes());
    }
}

在测试时,您可以使用HardCodedIdGeneartor构建您的对象,这样您就可以知道生成的ID是什么,并可以更自由地进行断言。

请与我们分享给您带来问题的代码。一般来说,模仿UUID似乎是错误的方法。那个类只是一个数据容器。您不需要模仿这些,只需创建包含您想要使用的数据的实例。比如:你不会嘲笑一张清单;您只需创建一个普通列表,并将您想要的数据放入其中。如果我在一个类中创建生成器,然后可以在(mockUtilities.generateId)时模拟该类(something
val mockUtilities=mock(classOf[utilities])。然后返回(1)
。如果我的方法位于
对象中,我应该如何执行此操作。请查看