LoginSignup
0
0

More than 3 years have passed since last update.

[ AndroidTest ] テストクラスからテスト対象クラスのフィールド、メソッドにアクセスする

Posted at

Androidのテストをする上で、テスト対象となるクラスのフィールドやメソッドにアクセスしたい時があったので、その方法について記す。

フィールド

フィールドにアクセスするときは以下のようにFieldクラスを使う。
テスト対象クラスがPersonActivity、テストクラスがPersonActivityTestとしている。

PersonActivity.java

public class PersonActivity{
    private weight = 150;

    private cry(int index){}
}

PersonActivityTest.java

public class PersonActivityTest{
    //1. インスタンス生成(4の段階で使う)
    PersonActivity personActivity = activityTestRule.launchActivity(null);

    //2. Field型の変数を定義し、getDeclaredField()の引数にアクセスしたいフィールド名を指定する
    Field fieldWeight = PersonActivity.class.getDeclaredField("weight");

    //3. アクセスしたいフィールドがprivateの時は、これをtrueにすることでアクセス可能になる
    fieldWeight.setAccessible(true);

    //4. アクセスしたいフィールドの値をテスト用に変更したいとき行う。
    //体重を150から49に変える
    fieldWeight.set(personActivity, 49);

    //5. Field型変数から値を取り出す、これをキャストするなりしてassertをつかってテストする
    fieldWeight.get(personActivity);
}

メソッド

メソッドにアクセスする場合はMethodクラスを使う。
PersonActivityTest.java

public class PersonActivityTest{
    //1. インスタンス生成
    PersonActivity personActivity = activityTestRule.launchActivity(null);

    //2. Method型の変数を定義し、getDeclaredMethod()の引数にアクセスしたいメソッド名とメソッドの引数の型を指定する
    Method methodCry = PersonActivity.class.getDeclaredMethod("cry", int.class);

    //3. アクセスしたいメソッドがprivateの時は、これをtrueにすることでアクセス可能になる
    methodCry.setAccessible(true);

    //4. Method型変数からinvoke()を使ってメソッドを実行する、これをキャストするなりしてassertをつかってテストする
    //第一引数にメソッドを持つクラスのインスタンス、第二引数にそのメソッドの引数を渡す減る
    methodCry.invoke(personActivity, 2);
}

参考URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0