我想模拟一个具有uuid值的对象,但是我不想安装powermock。
答案 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是什么,并更自由地断言。