重构

先看下重构前的测试用例:

public class TestLogin extends TestCase{  private ButtonManagerIbatis buttonManagerIbatis;     protected void setUp() throws Exception {      context = getContext();      buttonManagerIbatis = (ButtonManagerIbatis)context.getBean("buttonManagerIbatis");      super.setUp();    }    ApplicationContext context ;    protected ApplicationContext getContext() {         String[] paths = {"/context/application_context.xml"};       ApplicationContext  ctx = new ClassPathXmlApplicationContext(paths);       return ctx;    }    /** *//**   * 测试:登陆后读取权限信息,并且封装为树形结构   */   public void testLongin(){     List<Button> list = buttonManagerIbatis.getAuth("0000");     testall(list);        }    Map<String,Model> modelmap = new HashMap<String,Model>();    Map<String,Menu> fmenumap = new HashMap<String,Menu>();    Map<String,Menu> smenumap = new HashMap<String,Menu>();        public void testall(List<Button> buttonList){      for(Button button :buttonList){        test(modelmap,button);      }      for(Model model : modelmap.values()){        test2(smenumap,model);      }      for(Menu menu : smenumap.values()){        test3(fmenumap,menu);      }      for(Menu fmenu :fmenumap.values() ){        System.out.println(fmenu.getMenuName());        for(Menu smenu :fmenu.getMenus() ){          System.out.println(" "+smenu.getMenuName());          for(Model model : smenu.getModels()){            System.out.println("  "+model.getName());            for(Button b:model.getButtons()){              System.out.println("   "+ b.getButtonDesc());            }          }        }      }    }      public void test(Map<String,Model> modelmap , Button b){      Model m = b.getModel();      if(!modelmap.containsKey(m.getId()))        modelmap.put(m.getId(),m);      modelmap.get(m.getId()).getButtons().add(b);    }        public void test2(Map<String,Menu> menumap , Model m){      Menu menu = m.getMenu();      if(!menumap.containsKey(menu.getId()))        menumap.put(menu.getId(),menu);      menumap.get(menu.getId()).getModels().add(m);            }        public void test3(Map<String,Menu> menumap , Menu smenu){      Menu fmenu = smenu.getMenu();      if(!menumap.containsKey(fmenu.getId()))        menumap.put(fmenu.getId(),fmenu);      menumap.get(fmenu.getId()).getMenus().add(smenu);    }    }

这里有3个方法 test, test2 ,test3 考虑到以后还可能有变化,所以想把他们合成一个方法,首先考 虑到了反射

    public void testC(Map map , Object t , String parent ,String childrenname){      try {        Object t_parent = BeanUtils.getDeclaredProperty(t, parent);        Object t_parent_id = BeanUtils.getDeclaredProperty(t_parent, "id");        if(!map.containsKey(t_parent_id)){          map.put(t_parent_id, t_parent);        }        Object o = map.get(t_parent_id);        Collection t_collection =(Collection)BeanUtils.getDeclaredProperty(o, childrenname);        t_collection.add(t);      } catch (IllegalAccessException e) {        e.printStackTrace();      } catch (NoSuchFieldException e) {        e.printStackTrace();      }    }

于是修改后的测试用例为:

public class TestLogin extends TestCase{  private ButtonManagerIbatis buttonManagerIbatis;     protected void setUp() throws Exception {      context = getContext();      buttonManagerIbatis = (ButtonManagerIbatis)context.getBean("buttonManagerIbatis");      super.setUp();    }    ApplicationContext context ;    protected ApplicationContext getContext() {         String[] paths = {"/context/application_context.xml"};       ApplicationContext  ctx = new ClassPathXmlApplicationContext(paths);       return ctx;    }   public void testLongin(){     List<Button> list = buttonManagerIbatis.getAuth("0000");     testall(list);        }     Map<String,Model> modelmap = new HashMap<String,Model>();     Map<String,Menu> fmenumap = new HashMap<String,Menu>();     Map<String,Menu> smenumap = new HashMap<String,Menu>();        public void testall(List<Button> buttonList){      for(Button button :buttonList){        testC(modelmap,button,"model","buttons");      }            for(Model model : modelmap.values()){        testC(smenumap,model,"menu","models");      }      for(Menu menu : smenumap.values()){        testC(fmenumap,menu,"menu","menus");      }            for(Menu fmenu :fmenumap.values() ){        System.out.println(fmenu.getMenuName());        for(Menu smenu :fmenu.getMenus() ){          System.out.println(" "+smenu.getMenuName());          for(Model model : smenu.getModels()){            System.out.println("  "+model.getName());            for(Button b:model.getButtons()){              System.out.println("   "+ b.getButtonDesc());            }          }        }      }    }    /** *//**     *     * @param map     * @param b     */    @SuppressWarnings("unchecked")    public void testC(Map map , Object t , String parent ,String childrenname){      try {        Object t_parent = BeanUtils.getDeclaredProperty(t, parent);        Object t_parent_id = BeanUtils.getDeclaredProperty(t_parent, "id");        if(!map.containsKey(t_parent_id)){          map.put(t_parent_id, t_parent);        }        Object o = map.get(t_parent_id);        Collection t_collection =(Collection)BeanUtils.getDeclaredProperty(o, childrenname);        t_collection.add(t);      } catch (IllegalAccessException e) {        e.printStackTrace();      } catch (NoSuchFieldException e) {        e.printStackTrace();      }    }    }

例外 BeanUtils中的 反射方法:

static public Object getDeclaredProperty(Object object, String propertyName) throws IllegalAccessException, NoSuchFieldException {    Assert.notNull(object);    Assert.hasText(propertyName);    Field field = object.getClass().getDeclaredField(propertyName);    return getDeclaredProperty(object, field);  }

勤奋,它是一块可以吸引到一切美好事物的天然磁石,它比黄金珍贵,

重构

相关文章:

你感兴趣的文章:

标签云: