2012-02-25 7 views
0

Так у меня есть класс Java, с 3-х частных полейЧастный член доступен?

public class Parcel { 
    private String guid; 
    private List<String> files; 
    private String zipFileName; 

    public Parcel (List<String> files, String zipFilePath){ 
     UUID uuid = UUID.randomUUID(); 
     guid = uuid.toString(); 

     zipFileName = zipFilePath + File.separator + guid + File.separator + ".zip"; 

     if ((files != null) && (!files.isEmpty())){ 
      this.files = files; 
     } 
    } 
} 

Теперь я пишу тест JUnit, чтобы проверить эти частные поля

public class ParcelTest { 

    @Test 
    public void parcelObject() { 
     String zipFilePath = "/path/to/folder"; 
     List<String> files = new ArrayList<String>(); 

     files.add("/path/to/folder/test1"); 
     files.add("/path/to/folder/test2"); 

     Parcel parcel = new Parcel(files, zipFilePath); 

     Class<? extends Parcel> parcelClass = parcel.getClass(); 

     try { 
         Field guid = parcelClass.getDeclaredField("guid"); 
     guid.setAccessible(true); 
     System.out.println(guid.get(parcel)); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (NoSuchFieldException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

Я получаю сообщение об ошибке при попытке получить доступ к собственной GUID раздел. Я пробовал это даже после создания нулевого конструктора аргументов. как я могу получить доступ к частным членам здесь?

EDIT Я понял, и я обновил свой ответ, если кому-то это понадобилось.

P.S: Как я могу закрыть этот вопрос>

+2

Что вы должны сделать, это создать ответ на ваш вопрос, содержащий материал выше, а затем принять его , –

ответ

0

Почему бы вам не публичный геттер или сеттера вместо борьбы с отражением?

+1

не хотят его создавать. В любом случае, я понял это. Я буду обновлять сообщение .. спасибо за помощь :) –

+0

Вы можете использовать публичные конечные поля, если вы не хотите создавать геттеры. –

2

Вам намного лучше проверять внешне видимое поведение (поведение, а не геттеры и сеттеры). Если ваш код не изменяет поведение, его следует удалить.

(Также вы можете скопировать список, прежде чем припрятать его в поле (и до проверки достоверности).)