2016-04-26 5 views
1

私の最初のテストを書く時間です。私はそれについてかなり出ましたが、私は立ち往生しています。私はそこに2つの変数、あなたが見るように、それらの両方が、private static finalなので、この方法では、引数なしを持っている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つの変数を変更することを期待してテストする必要がありますか?

私はこれらの変数をテストするためのパブリックゲッターとセッターを作成する考えがありますが、これは良い方法ですか?

答えて

3

テストの作成が難しいことを認識すると、コードを改善できることがよくあります。そして、私にとっては、これがテストを書く最大の理由の1つです。より良いコードを書くように強制します!

あなたのコードスニペットを見れば、それは実際にいくつかのことを行います。

  • それはおそらく例外
  • それは2つのバージョンを抽出して整数に変換を投げ、バージョンシステムプロパティを取得し
  • 次に、それらを比較する

これを考慮すると、これはいくつかの機能に分割することができます。 より簡単にテストできます。

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

関連する問題