2012-02-25 155 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時收到錯誤字段。我甚至在創建零參數構造函數之後嘗試過。我應該如何訪問私人會員?

編輯 我想通了,我已經更新了我的迴應,如果別人需要它。

P.S: 我怎麼能關閉這個問題>

+2

你應該做的是創建一個包含上述材料你的問題的答案,然後接受它。 – 2012-02-25 02:41:48

回答

0

你爲什麼不有一個公共的getter或setter,而不是處理與反思?

+1

不想創建它。無論如何,我明白了。我會更新帖子..感謝您的幫助:) – 2012-02-25 02:36:29

+0

如果您不想創建獲取者,您可以使用公共final字段。 – 2012-02-25 10:29:16

2

你測試外部可見行爲(行爲,而不是獲取者和設置者)要好得多。如果你的代碼不改變行爲,你應該刪除它。

(你可能也想在一個領域積攢它(之前和檢查的有效性)之前複製您的列表。)