現在のフレームワークには、ActivityInstrumentationTestCase2 | を拡張する基本クラスがあります。Android 開発者。通常、テスト ケース クラスを記述するときは、この基本クラスを継承し (これを FooBase と呼びます)、メソッドを記述します。ご想像のとおり、これは非常に大きくなっています。テストしている機能の各領域を独自のクラスにして、再利用できるようにリファクタリングしたいと考えています。私のあいまいなクラスが十分に正確であることを願っています 目標は、メソッドを異なるクラスに分割して、テストケースから呼び出すことができるようにすることです
public class FooBase extends ActivityInstrumentionTestCase2 {
@Override
public void runTestOnUiThread(Runnable runnable) {
try {
super.runTestOnUiThread(runnable);
} catch (InterruptedException e) {
throw RuntimeInterruptedException.rethrow(e);
} catch (RuntimeException e) {
throw e;
} catch (Error e) {
throw e;
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
}
そして私たちのテストは例えば
public class TestFooBase extends FooBase{
public void testfeature(){
//execute a method that uses super.runTestOnUiThread()
}
}
リファクタリングを試みた方法
public class FooHelper extends FooBase{
public FooHelper(Activity activity){
setActivity(activity)
}
public void sameMethod(){
//moved the method in FooBase to this class that uses the runTestOnUiThread
}
}
私の新しいテストケースは次のようになります
public class TestFooBase extends FooBase{
FooHelper fooHelper;
public void setup(){
fooHelper = new FooHelper(getActivity);
}
public void testfeature(){
//execute a method that uses super.runTestOnUiThread()
fooHelper.callthemethod()
}
}
これを実行すると、super.runTestOnUIThread で null ポインターが取得されます。