利用反射读取Object中每个字段的值
forking003
2010-01-23
测试"更新"操作时用到:
Field[] fields = KnowledgePoint.class.getDeclaredFields();// 比较所有字段更新是否与期望一致 for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true);//允许访问private修饰符字段 if (Date.class.equals(fields[i].getType())) {//日期格式不同,需要转成字符串比较,根据Type判断是否java.util.Date类型 Assert.assertEquals(DateUtils.getDateTime(DateUtils .getDateTimePattern(), (Date) fields[i].get(kp1)), DateUtils.getDateTime(DateUtils.getDateTimePattern(), (Date) fields[i].get(actualKp1))); } else { Assert.assertEquals(fields[i].get(kp1), fields[i] .get(actualKp1)); } } 几个关键点: 1.Object.class.getDeclaredFields(),获取所有属性数组(Field[]),包括静态,私有属性; 2.field.setAccessible(true);没有这句就会报IllegalAccessException异常; 3.field.get(Object),获取Object的某个属性的值,比如field是password,那么返回就是密码的值; |
|
dieslrae
2010-01-25
其实我一般不直接获取字段的值,而是调用其get方法,这样就不会破坏其封装性
|
|
forking003
2010-01-25
呵呵,楼上的兄弟误会了,这个只在单元测试用到,并非给业务代码的,主要是节省一点测试代码,毕竟一个对象几十个字段,测试更新操作时,每个字段都要测到,所以才想了这个办法.
|