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();
}
}
型 和一个总是返回相同UUID的硬编码impl。
public HardCodedIdGenerator implements IdGenerator(){
public UUID generateId(){
return UUID.nameUUIDFromBytes("hardcoded".getBytes());
}
}
2条答案
按热度按时间ni65a41a1#
实现这一点的最简单方法是结束UUID生成。
假设您有一个使用
UUID.randomUUID
的类字符串
UUID的生成完全依赖于JDK的实现。一个解决方案是 Package UUID的生成,可以在测试时用不同的依赖项替换。
Spring有一个接口用于这个确切的senario,https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/IdGenerator.html
我并不是建议您将Spring用于此接口,只是出于信息目的。
然后,您可以结束UUID生成,
型
然后,您可以根据自己的需要实现多个UUID生成
型
和一个总是返回相同UUID的硬编码impl。
型
在测试时,你可以用HardCodedIdGeneartor构造你的对象,让你知道生成的ID是什么,并更自由地Assert。
8e2ybdfx2#
我曾经像这样在JUnit 5中使用
MockedStatic
:字符串
这样你就可以确保你的“随机”UUID总是等于
constUuid
,这意味着无论你的方法何时调用UUID.randomUUID()
,它总是返回相同的值。型
当然,如果方法,例如,只是返回生成的值
型