是否可以在不使用powermock的情况下在Mockito中模拟UUID?

时间:2018-08-23 17:32:05

标签: junit mockito powermock

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

1 个答案:

答案 0 :(得分:1)

您最简单的方法是包装UUID生成。

假设您使用UUID.randomUUID

public Clazz MyClazz{

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

}

UUID源代码完全与JDK实现联系在一起。一种解决方案是将UUID生成包装,可以在测试时将其替换为其他依赖项。

Spring的界面与此精确的https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/IdGenerator.html

我不建议您仅出于参考目的将Spring用于此界面。

然后您可以打包UUID代,

public class MyClazz{

private final idGeneartor;

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

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

然后,您可以根据自己的需要实现UUID创世记的多种实现方式

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是什么,并更自由地断言。