HOWTO · Java

Java でプライベート メソッドをテストする

このチュートリアルでは、Java でプライベート メソッドをテストする方法について説明します。

テスターとして作業している場合は、指定されたコードに対して多くのテスト操作を実行できます。 ただし、private メソッド を含むクラスがある場合、テスト操作を実行できない場合があります。

private メソッドは、外部からアクセスできないメソッドです。つまり、外部から呼び出すことはできません。 クラスの内部要素でのみ使用できます。

内部呼び出しにのみ応答しますが、private メソッドをすばやくテストできるアイデアがあります。 この記事では、private メソッドをテストする方法を示します。

Java で private メソッドをテストする

テストする必要がある以下のようなクラスがあるとします。

class MyClass {
  private int Sum(int a, int b) { // method is private
    return a + b;
  }
}

ご覧のとおり、上記のコードには Sum() という名前の private メソッドがあります。 Test という別のクラスでメソッドをテストしようとするとどうなるか見てみましょう。

public class Test {
  public static void main(String[] args) {
    // Created an object for the class "MyClass"
    MyClass mc = new MyClass();

    // Error: Called the private method externally
    System.out.println("The result is: " + mc.Sum(4, 5));
  }
}

以下のエラーが返されます。

error: Sum(int,int) has private access in MyClass

Sum()MyClass クラスの private メソッドであるため、外部からアクセスすることはできません。 したがって、これをチェックする唯一の方法は、メソッド Sum() を呼び出すクラス MyClass 内に public メソッドを含めることです。

public メソッドは次のようになります。

public int NewSum(int a, int b) {
  // A public method that can call the private method internally.
  return Sum(a, b);
}

上記のメソッドは、クラス MyClass 内にあるため、Sum() メソッドを呼び出します。 クラスMyClassのフルバージョンは次のようになります。

class MyClass {
  private int Sum(int a, int b) { // Private method
    return a + b;
  }
  public int NewSum(int a, int b) { // Public method
    return Sum(a, b);
  }
}

MyClass を更新した後、private メソッド Sum() をテストできるようになりました。 ただし、MyClass のオブジェクトから public メソッド NewSum() を呼び出す必要があります。

これで、更新されたテスト クラスは次のようになります。

class Test {
  public static void main(String[] args) {
    // Created an object for the class "MyClass"
    MyClass mc = new MyClass();

    // Called the public method "NewSum()"
    System.out.println("The result is: " + mc.NewSum(4, 5));
  }
}

上記のコード フェンスでは、オブジェクト MyClass クラスからクラス NewSum() を呼び出していることがわかります。 メソッド Sum() にエラーやバグがない場合、以下の出力が表示されます。

The result is: 9

上記では、private メソッドをテストし、それが正常に機能するかどうかを確認する最も基本的な方法を共有しました。