创建yaml文件:
testcase:
list:
- testDesc: case1
request:
traceId: 20210106001
data:
id: 20210106001
创建对应的class对象
Class request{
String traceId;
CreateDTO data;
}
Class CreateDTO {
String id;
}
服务启动后利用Binder绑定相关属性
public Object loadData() throws ClassNotFoundException, IOException {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
Class clazz = Class.forName(stackTrace[2].getClassName());
Field[] fields = clazz.getDeclaredFields();
for (Field field:fields){
//属性上面用的注解
if(field.isAnnotationPresent(InjectTestCases.class)) {
InjectTestCases annotation = (InjectTestCases)field.getAnnotation(InjectTestCases.class);
//根据yaml文件去读取
List<PropertySource<?>> yamlSources = new YamlPropertySourceLoader()
.load(CONFIG_NAME,new ClassPathResource(TEST_DATA_FOLDER
+ File.separator+annotation.filePath()));
env.getPropertySources().addLast(yamlSources.get(0));
//数据绑定
Object obj = Binder.get(env)
.bind( YAML_ROOT_NAME, Bindable.of(Class.forName(field.getType().getName()))).get();
env.getPropertySources().remove(CONFIG_NAME);
return obj;
}
}
return null;
}