我正在编写一个Junit测试框架来测试Web服务。带反射的空白字段
要求输入值来自许多不同的来源,例如较早的Web服务调用或类内的文字。
为了实现这一点,我有构造函数以不同的方式接受不同的输入;迄今为止都很简单。
问题是Web服务还需要执行一个完整的数据加载和一个必填字段只有有效载荷。
而不是使用if
语句来判断是否设置一个值,但我已经写了一个注释@Optional,而不是使用(在某些情况下是verrry long)测试。
添加此注释导致其通过下面的代码被清零:
/**
* Find all of the fields annotated with optional and null them
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
private void blankOptionalFields() throws IllegalAccessException{
for(Field field: this.getClass().getDeclaredFields()){
Annotation optionalAnnotation = field.getAnnotation(Optional.class);
if(!(field.isSynthetic()) && optionalAnnotation instanceof Optional){
field.setAccessible(true);
try{
field.set(this, null);
}
catch(IllegalArgumentException e){
logger.debug("Tried to set a scalar field to null!", e);
}
}
}
}
所以两两件事:
1:虽然这个作品它在某种程度上感觉脆弱/危险的,必须有一个更好的方法? 2:如果这不是一个拙劣的方法,那么将标量值设置为合适的值的最好方法是什么?
我对这个解决方案不知情。我不清楚为什么我没有首先想到这一点。 – 2010-01-20 16:04:56