2016-04-26 62 views
1

現在是我寫第一次測試的時候了。我很喜歡這個,但是我被卡住了。我有方法,它應該驗證安裝的Java版本TestNG:不帶參數的測試方法

public static boolean verifyJavaVersion() throws UserException { 
    if (System.getProperty("java.version") != null) { 
     String[] javaProperty = System.getProperty("java.version").substring(2, System.getProperty("java.version").length()).split("\\."); 
     int installedJavaVersion = Integer.parseInt(javaProperty[0]); 
     int installedJavaReleaseVersion = Integer.parseInt(javaProperty[1].substring(2, javaProperty[1].length())); 
     if (installedJavaVersion != REQUIRED_JAVA_VERSION || installedJavaReleaseVersion < MINIMUM_JAVA_RELEASE_VERSION) 
      throw new UserException("Java version is not correct. Required Java version " 
        + REQUIRED_JAVA_VERSION + ", release " + MINIMUM_JAVA_RELEASE_VERSION + " or higher"); 
     return true; 
    } 
    throw new UserException("Java version not found"); 
} 

我有2個變量在那裏,他們兩人都是private static final,所以,你看,這個方法沒有參數。我怎樣才能測試這個方法,並且我應該測試什麼期望改變這2個變量?

我有一個想法來創建測試這些變量的公共getter和setter,但這是一個好的做法嗎?

回答

3

認識到編寫測試很難,通常意味着代碼可以改進。對我而言,這是編寫測試的最大理由之一:他們迫使你編寫更好的代碼!

如果你看看你的代碼片段,它實際上做幾件事情:

  • 它得到的版本系統屬性,可能拋出異常
  • 它提取兩個版本,並將其轉換爲整數
  • 然後它比較它們

當考慮到這一點時,你會發現它可以分成幾個函數。而他們可以更容易地測試。

public static boolean verifyJavaVersion() throws UserException { 
    String javaVersion = ... 
    int installedJavaVersion = extractJavaVersion(javaVersion); 
    int installedJavaReleaseVersion = extractJavaReleaseVersion(javaVersion); 
    checkVersion(installedJavaVersion, REQUIRED_JAVA_VERSION, installedJavaReleaseVersion, MINIMUM_JAVA_RELEASE_VERSION); 
} 

這些都應該很容易測試。

爲了簡單起見,我刪除了您的空檢查,但您看到了這個想法。

+0

非常感謝你! – quento